如何使用 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.mzph.cn/news/35640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中函数式接口、Stream流、方法引用、junit单元测试、反射、注解

函数式接口: 在java中有且仅有一个抽象方法的接口称为函数式接口,但是可以包含其它的默认的或静态的方法。 格式: 修饰符 interface 接口名称 {public abstract 返回值类型 方法名称(可选参数);// 其他非抽象方法 }函数式接口:…

服务器安全维护注意事项有哪些?

服务器的安全关系着公司整个网络以及所有数据的安全,我们该如何做好服务器后续的安全维护呢?河南亿恩科技股份有限公司,专注服务器托管23年,不仅是国内专业的互联网基础应用服务提供商之一,还是国家工信部认定的综合电信服务运营…

OpenJDK Maven 编译出错: package jdk.nashorn.internal.runtime.logging does not exist

前言 OpenJDK 1.8.0Maven 3.8.5TencentOS Server 3.1 错误信息 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project tour-common: Compilation failure: Compilation failure: [ERROR] /opt/tour-c…

JavaScript预编译机制

变量预编译 任何变量,如果未经声明就赋值,此变量是属于 window 的属性,而且不会做变量提升,无论在哪个作用域内赋值。比如说直接写 console.log(a)肯定会报错,提示找不到 a。但如果直接写 a 100就不会报错&#xff0…

【Linux命令行与Shell脚本编程】第十九章 正则表达式

Linux命令行与Shell脚本编程 第十九章 正则表达式 文章目录 Linux命令行与Shell脚本编程 第十九章 正则表达式九.正则表达式9.1.正则表达式基础9.1.1.正则表达式的类型9.2.定义BRE模式9.2.1.普通文本9.2.2.特殊字符 9.2.3.锚点字符锚定行首^锚定行尾$组合锚点 9.2.4.点号字符\.…

funbox3靶场渗透笔记

funbox3靶场渗透笔记 靶机地址 https://download.vulnhub.com/funbox/Funbox3.ova 信息收集 fscan找主机ip192.168.177.199 .\fscan64.exe -h 192.168.177.0/24___ _/ _ \ ___ ___ _ __ __ _ ___| | __/ /_\/____/ __|/ __| __/ _ |/ …

SpringBoot复习(39)Servlet容器的自动配置原理

Servlet容器自动配置类为ServletWebServerFactoryAutoConfiguration 可以看到通过Import注解导入了三个配置类: 通过这个这三个配置类可以看出,它们都使用了ConditionalOnClass注解,当类路径存在tomcat相关的类时,会配置一个T…

【数据结构•堆】序列和的前n小元素

题目描述 问题&#xff1a;序列和的前n小元素   给出两个长度为n的有序表A和B, 在A和B中各任取一个, 可以得到 n^2 个和. 求这些和最小的n个。 输入输出格式 输入格式&#xff1a; 输入数据共三行。   第一行&#xff0c;一个整数值n &#xff08; n < 10^4 &#xff…

Linux系列:从0到1用Docker部署springboot项目

目录 1.前提条件 2.编写DockerFile镜像文件 3.打包SpringBoot项目 4.通过软件Xftp进行传输&#xff08;*&#xff09; 1.点击“文件-新建”​编辑 5.操作远程主机 1.docker构建 2.容器运行 6.容器的关闭和删除 1.前提条件 Linux、docker、xftp的安装、一台可以访问的远…

教雅川学缠论07-中枢实战众泰汽车000980

本文实战众泰汽车 下面是2023年11月14-2023年8月8众泰汽车日K图 先画日K 接下来处理包含&#xff0c;就变成下面这个样子 下面在套上缠论的理论&#xff0c;未来股价的走势应该是红色椭圆形虚线里面的样子 好了&#xff0c;文章就到这里&#xff0c;如果众泰最终不是这个走势…

linux 目录操作命令

目录操作命令 文件列表 ls命令文件列表 ls [选项] [参数]-------------------------------l 详细信息-L 紧接着符号性连接&#xff0c;列出它们指向的文件-a 所有文件&#xff0c;包含隐藏文件(以点号起始的文件)-A 与-a相同&#xff0c;但是不会列出来. 和 ..-c 根据创建时间排…

IDEA部署配置Maven项目教程,IDEA配置Tomcat(2019.3.3)

一、前言 当涉及到软件开发和项目管理时&#xff0c;使用一个可靠的构建工具是非常重要的。Maven是一个广泛使用的构建工具&#xff0c;它为Java项目提供了一种简化的构建过程和依赖管理。 在本文中&#xff0c;我们将探讨如何部署Maven并开始使用它来构建您的项目。我们将介绍…

Java基础篇--浅拷贝和深拷贝

概念 浅拷贝&#xff08;Shallow Copy&#xff09;和深拷贝&#xff08;Deep Copy&#xff09;是在对象复制过程中常用的概念。 浅拷贝是指创建一个新对象&#xff0c;并将原始对象的非静态字段的值拷贝到新对象中。如果字段是基本数据类型&#xff0c;直接复制其值&#xf…

开源数据库Mysql_DBA运维实战 (修改root密码)

MySQL——修改root密码的4种方法 本文以windows为例为大家详细介绍下MySQL修改root密码的4种方法&#xff0c;大家可以可以根据的自己的情况自由选择&#xff0c;希望对大家有所帮助 方法1&#xff1a; 用SET PASSWORD命令 首先登录MySQL。 格式&#xff1a;mysql> set pass…

Android APK体积优化(瘦身)

1、基础知识&#xff1a; 1.1 apk结构 lib &#xff1a;存放so文件&#xff0c;对应不同的cpu架构 res &#xff1a;资源文件&#xff0c;layout、drawable等&#xff0c;经过aapt编译 assets &#xff1a;资源文件&#xff0c;不经过aapt编译 classes.dex &#xff1a;dx编译…

爬虫:使用Selenium模拟人工操作及获取网页内容

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对…

graphab 教程 ——生成廊道

Graphab软件包括图谱创建、基于图谱的连通性计算、分析与推广、制图四个模块。Graphab软件的图谱创建基于栅格数据进行,包括斑块识别和连接建立两个步骤。Graphab 软件可识别的栅格数据格式包括TIFF、ASCI和RST,栅格像元记录数值用于识别斑块类型,识别规则可以选择四邻域或八邻…

2-redis单节点搭建安装

1.系统要求 本次redis四种模式(单机(standalone)模式、主从(master-slave)模式、哨兵(sentinel)模式、集群(cluster)模式)的搭建,以CentOS服务器进行。 类型版本CentOS7.9Redis7.0.121.1.OS基础配置 CentOS为了能够正常安装redis,需要对CentOS进行常规的一些基础配置,主要…

【Zabbix安装-5.5版本】

Zabbix安装&#xff08;rpm包安装&#xff09; Index of /zabbix/zabbix/5.5/rhel/8/x86_64/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror rpm包链接&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.5/rhel/8/x86_64/zabbix-release-5.5-1.e…

Unity3d C#利用本地网页快速打开萤石云监控视频流(ezopen)实现云台,声音等控制,支持WebGL平台,替代UMP播放(含源码)

前言 之前我介绍了替代Universal?Media?PlayerUMP播放石云监控视频流(ezopen)的功能&#xff0c;效果还是很明显的&#xff0c;笔者的测试是差不多3-5秒就能打开监控画面&#xff0c;不过稍微遗憾的是&#xff0c;之前的功能是iframe打开石云提供的播放网页的形式&#xff0…