如何使用 Go 获取 URL 的参数,以及使用时的问题

Go 获取 URL 参数也很容易,但是由于 Go 有严格的数据类型和错误管理,所以在使用时会些微有些复杂。所以本文不仅会讲如何获取 URL 的参数,也会讲在使用时的一些问题。

首先假设 URL 是https://www.example.com/?keyword=abc&id=12

其他语言一般这个时候就是导入包了,但是 Go 的包管理很严格,所以建议你在输入完下列代码后,在安装 VSCode 中使用保存快捷键(如 Command + S 键)或者在终端中goimports工具来自动补全包,这样就可以保证一定没有错误。因为虽然现在一般使用"net/url"或者"net/http",但某些情况可能不一样,或者未来 Go 会对一些包进行改名,这都会导致包的名称不一定,所以“授人以鱼不如授人以渔”。

接下来需要使用url.Parse()来解析上面的 URL,以及设置错误信息来方便 URL 解析出错的时候进行处理,最后声明变量q来方便后续获取和操作参数:

u, err := url.Parse("https://www.example.com/?keyword=abc&id=12")
if err != nil {
	log.Fatal(err)
}
q := u.Query()

这里u.Query()会进行一个映射,将参数名和值对应上,由于可能会有多个相同的参数名,所以这里的“键值对”的“值”是一个字符串数组。此时就可以通过q来获取参数了,如下:

fmt.Println(q["keyword"])
fmt.Println(q["id"])

输出结果为:

[abc]
[12]

下面说说需要注意的几个问题:

如何将参数字符串转换成整数

上文提到这里的q["keyword"]q["id"]实际上是个字符串数组,所以如果你想将上面id的值12当成整数进行操作,那么就得使用下面的方式(如果你有多个id参数的话,那么就根据自己情况选择):

id := strconv.Atoi(q["id"][0])

这时候变量id的值就是整数12

判断是否有参数或有某个参数

一般参数的使用方法就是用来计算或判断,但是如果我们要判断有没有参数部分或者有没有某个参数该怎么办呢?

有两种方案:
第一种是通过判断q或某个参数对应的值是否为空,如下:

//判断是否有参数
if q != nil {
	...
}
//判断是否有id这个参数
if q["id"] != nil {
	...
}

第二种是通过len()测量q或某个参数对应值的长度,如下:

//判断是否有参数
if len(q) != 0 {
	...
}
//判断是否有id这个参数
if len(q["id"]) != 0 {
	...
}

希望能帮到有需要的人~

你可能感兴趣的:(Web,笔记,golang,后端)