2017-09-13 75 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