2017-09-13 73 views
0

我需要发送http请求到https://some-domain.com/getsomething/?id=myID 我有url并需要添加一个查询参数。这里是我的Go代码在Go中添加查询字符串url

baseUrl := "https://some-domain.com" 
relativeUrl := "/getsomething/" 
url, _ := url.Parse(baseUrl) 
url.Path = path.Join(url.Path, relativeUrl) 

// add parameter to query string 
queryString := url.Query() 
queryString.Set("id", "1") 
// add query to url 
url.RawQuery = queryString.Encode() 
// print it 
fmt.Println(url.String()) 

在输出我看到这个网址:https://some-domain.com/getsomething?id=1

而这需要一个:https://some-domain.com/getsomething/?id=1

你可以看到,有?之前没有/字符。

你知道如何解决它,无需手动字符串操作?

https://play.golang.org/p/HsiTzHcvlQ

+0

一切都确定了这个代码,我输出为'的https://some-domain.com/getsomething/ ID = 1'。我编辑了你的代码,因为[Set](https://golang.org/pkg/net/url/#Values.Set)函数接受一个字符串作为值。 –

+0

我试过了你的程序,输出结果如你所需('https://some-domain.com/getsomething/?id = 1')。在Playground上 - https://play.golang.org/p/M87JQqFb45 – Ravi

+0

对不起,我在这个问题上让我的代码更简单。更新。 – Vitalii

回答

2

您可以使用ResolveReference

package main 

import (
    "fmt" 
    "log" 
    "net/url" 
) 

func main() { 
    relativeUrl := "/getsomething/" 
    u, err := url.Parse(relativeUrl) 
    if err != nil { 
     log.Fatal(err) 
    } 

    queryString := u.Query() 
    queryString.Set("id", "1") 
    u.RawQuery = queryString.Encode() 

    baseUrl := "https://some-domain.com" 
    base, err := url.Parse(baseUrl) 
    if err != nil { 
     log.Fatal(err) 
    } 

    fmt.Println(base.ResolveReference(u)) 
} 

https://play.golang.org/p/BIU29R_XBM

+0

我看到相同的输出,请查看https://play.golang.org/p/09Ukn5deXE – Vitalii

+0

哟,我的不好。更新。 – s7anley

+0

它的工作原理,谢谢! – Vitalii