go 拼接url参数

1、URL的定义信息

type URL struct {
   Scheme      string
   Opaque      string    // encoded opaque data
   User        *Userinfo // username and password information
   Host        string    // host or host:port
   Path        string    // path (relative paths may omit leading slash)
   RawPath     string    // encoded path hint (see EscapedPath method)
   ForceQuery  bool      // append a query ('?') even if RawQuery is empty
   RawQuery    string    // encoded query values, without '?'
   Fragment    string    // fragment for references, without '#'
   RawFragment string    // encoded fragment hint (see EscapedFragment method)
}
type URL struct {
   Scheme      string    // http或https协议
   Opaque      string    // 编码不透明数据
   User        *Userinfo // 用户名密码信息--例如FTP需要带着用户名密码访问
   Host        string    // 主机或主机:端口
   Path        string    // 路径(相对路径可以省略前导斜线)
   RawPath     string    // 编码路径
   ForceQuery  bool      // 即使没有请求参数也会强制添加 ? 号
   RawQuery    string    // 编码不带 ? 号的请求参数
   Fragment    string    // 不带 # 号的引用片段
   RawFragment string    // 编码引用片段
}

2、解析给定的URL

package main

import (
   "fmt"
   "net/url"
)

func main() {
   rawUrl := "https://pkg.go.dev/net/url?a=b&c=d#example-ParseQuery"
   uri, err := url.Parse(rawUrl)
   if err != nil {
      return
   }
   fmt.Println(fmt.Sprintf("解析后的URL是:%#v", uri))
}

image-20220117162218405

3、拼接query参数构建URL

package main

import (
   "fmt"
   "net/url"
)

func main1() {
   rawUrl := "https://pkg.go.dev/net/url?a=b&c=d#example-ParseQuery"
   uri, err := url.Parse(rawUrl)
   if err != nil {
      return
   }
   fmt.Println(fmt.Sprintf("解析后的URL是:%#v", uri))
}
func main() {
   //创建 https://pkg.go.dev/net/url?a=b&b=d#example-ParseQuery
   u := url.URL{}
   u.Scheme = "https"
   u.Host = "pkg.go.dev"
   u.Path = "/net/url"

   values := url.Values{} //拼接query参数
   values.Add("a", "b")
   values.Add("b", "d")

   u.RawQuery = values.Encode()

   u.Fragment = "example-ParseQuery"

   fmt.Println(fmt.Sprintf("URL是:%s", u.String()))

}

image-20220117165049751

4、修改请求路径和参数

package main

import (
	"fmt"
	"net/url"
	"path"
)

func main() {
	rawUrl := "https://pkg.go.dev/net/url?a=b&c=d#example-ParseQuery"
	uri, err := url.Parse(rawUrl)
	if err != nil {
		return
	}

	v := url.Values{}
	v.Add("a", "c")
	v.Add("c", "b")

	uri.RawQuery = v.Encode()
	uri.Path = path.Join(uri.Path, "/ccc/ddd")
	fmt.Println(fmt.Sprintf("修改后的URL是:%s", uri))
}

image-20220117165348164

posted @ 2022-01-17 16:56  南风丶轻语  阅读(5690)  评论(0编辑  收藏  举报