Go语言学习: URL 的相关操作

关于 URL 的一些常用操作
更新于: 2022-09-03 07:33:58

目标

本文将讨论 URL : how to add, modify or delete URL query string parameters in Go

将 https://example.com?name=alice&age=28&gender=female
变成 https://example.com?name=alice&age=29&occupation=carpenter

Cheatsheet

操作代码
取得 url 所有参数
func Qs(inUrl string) url.Values {
	target, err := url.Parse(inUrl)
	if err != nil {
		log.Fatal(err)
	}
	return target.Query()
}
更新 URL
// 返回多个参数
func Qs(inUrl string) (*url.URL, url.Values) {
	target, err := url.Parse(inUrl)
	if err != nil {
		log.Fatal(err)
	}
	return target, target.Query()
}

u, qs := Qs("https://example.com?name=aric&age=100&gender=male")
qs.Add("page", "1")
u.RawQuery = qs.Encode()
fmt.Println(u.String())
生成新的 URL 再进行操作
urlA, err := url.Parse("https://example.com?name=alice&age=28&gender=female")
if err != nil {
    log.Fatal(err)
}

// Make a copy of the original url.URL.
urlB := *urlA

// Make the param changes to the new url.URL type...
values := urlB.Query()

values.Add("occupation", "carpenter")
values.Del("gender")
values.Set("age", strconv.Itoa(29))

urlB.RawQuery = values.Encode()

fmt.Printf("urlA: %s\n", urlA.String()) // This will be unchanged.
fmt.Printf("urlB: %s\n", urlB.String()) // This will have the new params.
测试 Url 是否含有 String 方法
func main() {
	u, _ := url.Parse("https://example.com?name=alice&age=28&gender=female")
	st := reflect.TypeOf(u)
	m, ok := st.MethodByName("String")
	if !ok {
		fmt.Println(m)
		fmt.Println("don't has method string")
		// method doesn't exist
	} else {
		fmt.Println("has method")
		// do something like invoke m.F
	}
}

参考