20 Go的命令行参数

概述

        在上一节的内容中,我们介绍了Go的时间日期,包括:time包、格式化日期、日期字符串解析、计算日期差、时区操作、定时任务等。在本节中,我们将介绍Go的命令行参数。命令行参数在程序设计中扮演着重要的角色,它允许用户在运行程序时提供自定义的输入,以控制程序的行为。Go语言提供了灵活且强大的命令行参数处理机制,既可以使用os.Args,也可以使用flag包。

os.Args

        os.Args是一个指向字符串切片的指针,其中第一个元素是程序的名称,后续元素是用户提供的命令行参数。注意:命令行参数的顺序是按照它们在命令行中出现的顺序排列的,我们可以根据需要解析和处理这些参数。

package mainimport ("fmt""os"
)func main() {// 第一个元素是程序名称fmt.Println(os.Args[0])// 从第二个元素开始是命令行参数args := os.Args[1:]// 遍历命令行参数,并打印每个参数的值for _, arg := range args {fmt.Println(arg)}
}

flag包

        flag包是用于处理命令行参数的常用包,它提供了一组函数和类型,用于定义和解析命令行标志以及操作命令行参数。flag包的主要功能如下:

        定义标志:使用flag.FlagSet类型和其方法可以定义命令行标志。比如:可以使用flag.String("name", "default", "description")定义一个字符串类型的标志,并设置其默认值和描述信息。

        解析标志:通过调用flag.Parse()函数,可以将命令行参数解析为已定义的标志。解析后,可以通过访问标志的值来获取命令行参数的值。

        命令行参数访问:通过使用flag.Args()函数,可以获取命令行参数中未被解析为标志的值。

        flag包提供了多种类型的标志,比如:字符串类型(String)、整数类型(Int)、浮点数类型(Float64)、布尔类型(Bool)等,可以根据需要定义不同类型的标志来处理不同的命令行参数。标志可以设置一些选项,比如:标志的名称、默认值、使用信息等,这些选项用于描述标志的属性和行为。

        在解析命令行参数时,flag包会按照命令行中参数的顺序解析标志。第一个参数会被解析为第一个标志的值,第二个参数会被解析为第二个标志的值,以此类推。如果某个参数没有对应的标志,那么它会被忽略。定义的标志名称必须是合法的标识符,不能使用无效的字符或关键字。同时,标志名称应该是全局唯一的,不能与其他标志重名。如果定义标志时出现了错误,比如:重复定义了相同的标志,或给标志设置了无效的值,flag包会返回一个错误信息,可以使用错误处理机制来捕获这些错误并进行适当的处理。

        命令行参数可以以不同的格式传递,常见的格式包括:单个参数(-flagvalue)或多个参数(--flagvalue1 value1 --flagvalue2 value2)。

        在下面的示例代码中,我们定义了三个标志和选项,分别为:name、age和freshman。其中,name是一个字符串类型的标志,有默认值"Mike"。age是一个整数类型的标志,有默认值18。freshman是一个布尔类型的标志,有默认值false。

        通过调用flag.Parse()函数解析命令行参数后,我们可以访问标志的值来获取命令行中传递的参数。在该示例中,我们打印输出了每个标志的值。另外,我们使用flag.Args()函数获取了命令行参数中未被解析为标志的值,并打印出来,这样就可以同时处理命令行中的带标志参数和普通参数。

package mainimport ("flag""fmt"
)func main() {// 定义标志和选项,假设输入命令行参数为:./test.exe --name Jack --age 15 --freshman Hello CSDNvar (name = flag.String("name", "Mike", "the name of the student")age = flag.Int("age", 18, "the age of the student")freshman = flag.Bool("freshman", false, "freshman or not"))// 解析命令行参数flag.Parse()// 访问标志的值,输出:Jack 15 truefmt.Println(*name, *age, *freshman)// 输出命令行参数中未被解析为标志的值,分别输出:Arg: Hello Arg: CSDNfor _, arg := range flag.Args() {fmt.Println("Arg:", arg)}
}

        使用flag后,我们可以在命令行窗口中输入命令./test.exe --help来打印输出命令行参数的帮助信息。

Usage of F:\test.exe:-age intthe age of the student (default 18)-freshmanfreshman or not-name stringthe name of the student (default "Mike")

        到这里,本专栏《Go to Learn Go》的所有内容就全部介绍完毕了。希望通过本专栏,你已经学会了Go语言的基础知识,以及常用库的使用。

        酒酣君去我亦别,后夜山头望明月。于道各努力,千里自同风。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/188020.shtml

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

相关文章

4个Pycharm高效插件

大家好,Pycharm是Python最受欢迎的集成开发环境之一,它具有良好的代码助手、漂亮的主题和快捷方式,使编写代码变得简单快捷。话虽如此,开发者仍可以通过使用一些插件来提高在Pycharm中编写Python代码的效率和乐趣,在市…

【【FPGA 之Micro Blaze的串口中断实验】】

FPGA 之Micro Blaze的串口中断实验 我们在使用 MicroBlaze 进行嵌入式系统设计的时候,通常会用到 AXI Uartlite IP 核与外部设备通信。AXI UART IP 核实现了 RS-232 通讯协议,并使得大家可以设置串口通信相关的波特率、奇偶校验位、停止位和数据位等参数…

前端OFD文件预览(vue案例cafe-ofd)

0、提示 下面只有vue的使用示例demo ,官文档参考 cafe-ofd - npm 其他平台可以参考 ofd - npm 官方线上demo: ofd 1、安装包 npm install cafe-ofd --save 2、引入 import cafeOfd from cafe-ofd import cafe-ofd/package/index.css Vue.use(cafeOfd) 3、使…

数据可视化工具APITable:实现强大的多维表格功能并随时随地远程访问

APITable免费开源的多维表格与可视化数据库公网远程访问 文章目录 APITable免费开源的多维表格与可视化数据库公网远程访问前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 前言 vika维格表作为新一代数据生产力平台&#xff0c…

kubectl系列(五)-kubectl scale 命令最佳实践

1 概述 kubectl scale命令通过调整正在运行的容器的数量来立即缩放应用程序。这是增加部署副本数量的最快、最简单的方法,可用于应对服务高峰以及日常维护变更。 在本文中将了解如何使用kubectl scale来扩展一个简单的Kubernetes Deployment,同时还将更…

kobs-ng 烧写nand中的uboot

如何获取kobs-ng 我是使用buildroot自动编译的imx-kobs,生成了kobs-ng可执行文件。 使用 kobs-ng 烧写 u-boot 1. flash_erase /dev/mtd0 0 0 //擦除uboot所在分区 2. 挂载 debugfs mount -t debugfs debugfs /sys/kernel/debug 如果不挂载为报以下错误&#x…

Java中的synchronized关键字

目录 1、synchronized是什么 2、synchronized的用法 synchronized可以用在方法或者代码块上,分别称为同步方法和同步代码块。 用法理解 3、synchronized的实现原理 ⭐synchronized锁的对比 4、synchronized的优缺点 ⭐扩展:synchronized 和 vola…

nvm安装管理nodejs版本

1:如果之前先安装了nodejs先卸载nodejs 2:下载nvm,点击下载路径https://github.com/coreybutler/nvm-windows/releases,选择相应环境下载,如下window环境下载 下载成功后,选择NVM安装在哪个文件目录下&…

IDEA之Eclipse Code Formatter插件的安装与使用

概述 Eclipse、Intellij idea格式化结果不同,之前由于没有Eclipse Code Formatter插件,所以公司统一用eclipse做开发,但是我们都知道IDEA是非常强大、也非常的方便,很多功能是eclipse不具备的,只是我们公司统一用&…

【隐私计算】VOLE (Vector Oblivious Linear Evaluation)学习笔记

近年来,VOLE(向量不经意线性评估)被用于构造各种高效安全多方计算协议,具有较低的通信复杂度。最近的CipherGPT则是基于VOLE对线性层进行计算。 1 VOLE总体设计 VOLE的功能如下,VOLE发送 Δ \Delta Δ和 b b b给send…

【论文阅读笔记】InstructDiffusion: A Generalist Modeling Interface for Vision Tasks

【论文阅读笔记】StyleAvatar3D: Leveraging Image-Text Diffusion Models for High-Fidelity 3D Avatar Generation 论文阅读笔记论文信息引言动机挑战 方法结果 关键发现相关工作1. 视觉语言基础模型2. 视觉通用模型 方法/模型视觉任务的统一说明训练数据构建网络结构 实验设…

全网最新最全面的Jmeter接口测试:jmeter模拟http请求实战

1、get请求 http://www.hnxmxit.com/ 2、带参数的get请求 微信公众号获取token请求 3、自定义头部信息的请求 百度搜索请求 https://www.baidu.com/s?wd猫 4、post请求 微信公众号添加用户标签请求 注:post请求中如果body中的数据为json,一定要在信息头管理器中…

编译原理头歌实验:实验1《词法分析程序设计与实现》(C语言版)

任务描述 本关任务:加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。 相关知识 为了完成本关任务&#xff0…

Qt应用开发--国产工业开发板全志T113-i的部署教程

Qt在工业上的使用场景包括工业自动化、嵌入式系统、汽车行业、航空航天、医疗设备、制造业和物联网应用。Qt被用来开发工业设备的用户界面、控制系统、嵌入式应用和其他工业应用,因其跨平台性和丰富的功能而备受青睐。 Qt能够为工业领域带来什么好处: -…

袋鼠云产品功能更新报告08期|近百项全新功能和优化,你要的都在这里!

欢迎来到袋鼠云08期产品功能更新报告!在瞬息万变的市场环境中,我们深知客户的需求与期待,因此,我们及时推出袋鼠云最新产品更新及优化,包括数据治理中心、Hive SQL 性能优化、新插件等,助力企业在数字世界中…

Golang分布式事务

引言 在分布式系统中,事务管理是一项非常重要的任务。分布式事务涉及到多个事务参与者之间的协调和一致性保证,同时还要解决网络延迟、故障恢复等问题。Golang作为一门强大的编程语言,提供了一些工具和框架来帮助开发人员实现分布式事务。本…

awk从放弃到入门(11):拾遗之”三元运算”与”打印奇偶行”

awk从放弃到入门(11):拾遗之”三元运算”与”打印奇偶行” 三元运算打印奇偶行 本博文转载自 这篇文章中的知识点是建立在前文的基础上的,如果你还没有掌握前文中的知识,请先参考之前的文章。 这篇文章其实是对之前知…

英语翻译小软件 ← Python实现

【程序描述】 利用Python实现一个英语翻译小软件。 ★ 当输入一个英文单词后,输出对应的中文意思。 ★ 当输入 q 时,退出程序。 ★ 当输入一个不存在的词条时,捕获异常,提示“No finding!”。【程序代码】 dict{&quo…

IOS/安卓+charles实现抓包(主要解决证书网站无法打开问题)

安装 官网下载 https://www.charlesproxy.com/latest-release/download.do 安装charles文档 流程 上述链接解决下图问题 使用介绍 Charles介绍 上述链接看一至三即可,了解首页各个按钮的作用 charles全面使用教程及常见功能详解(较详细&#xff09…

Vim编辑器使用

替换全部 :%s/search_string/replace_string/g 撤销 u 撤销 ctrl r 取消撤销 换行 下移动一行 -上移动一行 删除 插入模式删除字符 Ctrl U