我感兴趣的是通过浏览器或CLI动态地从用户那里获取参数,以将这些参数传递给REST API调用,从而使用Go动态构造URL,最终将获取一些JSON数据.
我想知道Go中的一些技巧可以帮助我做到这一点.我认为一种理想的方法是使用地图并使用参数键和相应的值填充它,然后迭代它并将其附加到URL字符串.但是当涉及动态获取参数并填充地图时,我不太确定如何在Go中执行此操作.有人可以帮我解决Go中的一些代码片段吗?
请求示例:
http://<IP>:port?api=fetchJsonData&arg1=val1&arg2=val2&arg3=val3.....&argn=valn
Run Code Online (Sandbox Code Playgroud)
One*_*One 62
已经有了url.URL适合你的东西.
对于http处理程序(传入请求),它是http.Request(使用req.URL.Query()访问它的一部分).
官方文档中的一个很好的例子:
u, err := url.Parse("http://bing.com/search?q=dotnet")
if err != nil {
log.Fatal(err)
}
u.Scheme = "https"
u.Host = "google.com"
q := u.Query()
q.Set("q", "golang")
u.RawQuery = q.Encode()
fmt.Println(u)
Run Code Online (Sandbox Code Playgroud)
Sam*_*rry 12
url.Values{}提供用于构建查询参数的接口。您可以构造内联和/或用于.Add动态属性:
queryParams := url.Values{
"checkin": {request.CheckIn},
"checkout": {request.CheckOut},
}
if request.ReservationId {
queryParams.Add("reservationId", request.ReservationId)
}
url := "https://api.example?" + queryParams.Encode() // checkin=...&checkout=...
Run Code Online (Sandbox Code Playgroud)
https://github.com/golang/go/issues/17340#issuecomment-251537687
https://play.golang.org/p/XUctl_odTSb
package main
import (
"fmt"
"net/url"
)
func someURL() string {
url := url.URL{
Scheme: "https",
Host: "example.com",
}
return url.String()
}
func main() {
fmt.Println(someURL())
}
Run Code Online (Sandbox Code Playgroud)
returns: