Go中的URL生成器/查询生成器

ozxc1zmp  于 2023-05-20  发布在  Go
关注(0)|答案(4)|浏览(195)

我感兴趣的是通过浏览器或CLI动态地从用户那里获取参数作为输入,将这些参数传递给REST API调用,从而使用Go动态地构建URL,最终获取一些JSON数据。
我想知道一些围棋技巧,可以帮助我做到这一点。我认为一个理想的方法是使用一个Map,用参数、键和相应的值填充它,然后迭代它并将它附加到URL字符串。但是当涉及到动态地获取参数并填充Map时,我不太确定如何在Go中做到这一点。有人能帮我写一些Go中的代码片段吗?
请求示例:

http://<IP>:port?api=fetchJsonData&arg1=val1&arg2=val2&arg3=val3.....&argn=valn
t9eec4r0

t9eec4r01#

已经有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)
kr98yfug

kr98yfug2#

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())
}

返回:
https://example.com

mzillmmw

mzillmmw3#

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=...
s71maibg

s71maibg4#

package main

import (
    "fmt"
    "net/url"
)

func main() {

 partofUrl := &url.URL{
     Scheme: "https",
     Host: "test.dev",
     Path: "/abc",
}
fmt.Println(partofUrl.String()) //https://test.dev/abc
    
}

相关问题