当前位置: 首页 > news >正文

如何使用 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 {...
}

希望能帮到有需要的人~

http://www.lryc.cn/news/121436.html

相关文章:

  • Linux驱动-基于QT控制LED灯
  • 布隆过滤器的原理和应用场景
  • ElasticSearch学习
  • 软件测试基础篇——Redis
  • 大数据扫盲(1): 数据仓库与ETL的关系及ETL工具推荐
  • spring的aop动态代理对象注入时机
  • idea集成svn
  • RedisDesktopManage
  • 《Vue.js实战》——基础篇(1)
  • R语言 列表中嵌套列名一致的多个数据框如何整合为一个数据框
  • PyQt5利用QTextEdit控件输入多行文本
  • 【数据结构】二叉树常见题目
  • 树莓派使用 ENC28J60
  • 跟我学C++中级篇——模板友元的应用
  • 软件测试基础篇——MySQL
  • FreeRTOS(二值信号量)
  • leetcode面试题:动物收容所(考查对队列的理解和运用)
  • 【Linux命令行与Shell脚本编程】第十八章 文本处理与编辑器基础
  • 2023牛客暑期多校训练营7
  • centos7升级glibc2.28
  • 腾讯云香港服务器租用_2核2G20M_2核4G30M
  • 十三、ESP32PS2摇杆(ADC)
  • 网络安全的相关知识点
  • 算法练习(6):牛客在线编程06 递归/回溯
  • C#使用OpenCv(OpenCVSharp)图像局部二值化处理实例
  • MySQL多表关联查询
  • flutter开发实战-CustomClipper裁剪长图帧动画效果
  • CSS 中的优先级规则是怎样的?
  • 概率图模型(Probabilistic Graphical Model,PGM)
  • Oracle 知识篇+会话级全局临时表在不同连接模式中的表现