Go中的URL构建器/查询构建器

psb*_*its 29 rest url go

我感兴趣的是通过浏览器或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)

  • 我喜欢doc示例的厚脸皮:) (3认同)
  • 这是一个不错的方法。谢谢。您还可以建议一种方法,我可以将键值对存储在地图中,然后使用该地图构建 URL 吗? (2认同)
  • @psbits`url.Values`是一个映射(您可以从u.Query()获取副本),可以使用它来构造URL,然后使用`u:= url.Parse(“ http://base.com /“); u.RawQuery = yourValues.Encode(); 网址:= u.String()` (2认同)

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)


030*_*030 9

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:

https://example.com