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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM