在Go中添加查询字符串URL

6

我需要发送http请求到https://some-domain.com/getsomething/?id=myID 我有一个url,需要添加查询参数。以下是我的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())

在输出中我看到这个url:https://some-domain.com/getsomething?id=1 但是需要的是这个:https://some-domain.com/getsomething/?id=1 你可以看到在?之前没有/字符。
你知道如何在不进行手动字符串操作的情况下修复它吗? https://play.golang.org/p/HsiTzHcvlQ

这段代码没问题,对我来说输出是 https://some-domain.com/getsomething/?id=1。我已经编辑了你的代码,因为 Set 函数需要一个字符串作为值。 - Paul Boutes
我试了你的程序,输出结果符合你的要求(https://some-domain.com/getsomething/?id=1)。Playground链接 - https://play.golang.org/p/M87JQqFb45 - Ravi R
非常抱歉,我将这个问题中的代码简化了。已更新。 - Vitalii
1个回答

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


抱歉,我的错。已更新。 - s7anley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接