在Go中添加查询字符串url

时间:2017-09-13 10:43:34

标签: url go

我需要向https://some-domain.com/getsomething/?id=myID发送http请求 我有网址,需要添加一个查询参数。这是我的Go代码

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

1 个答案:

答案 0 :(得分:3)

您可以使用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