【Golang标准库】flag
参考:
Golang Flag包使用介绍
0.前言
一个可执行文件,我们可以使用不同的启动参数来控制程序的行为。如果程序仅仅读取命令行输入来控制程序的行为,那么这个程序的使用体验一定很差。为了提供用户体验,程序的开发者需要给用户提供如下信息:
- 启动参数的名称
- 启动参数的说明
- 启动参数的默认值
Golang中有一个flag包,可以完美解决这个问题。
1.使用方式
示例程序
var (
name = flag.String("name", "lpc", "go flag test")
)
func main() {
flag.Parse()
fmt.Println("hello ", *name)
}
执行结果
$ ./flag-test -h
Usage of ./flag-test:
-name string
(default "lpc")
$ ./flag-test
hello lpc
$ ./flag-test -name lpc123
hello lpc123
在上边的示例程序中,有三个比较重要的步骤:
- 设置
- 解析
- 使用
// 设置命令行参数名称,默认值,使用说明
name = flag.String("name", "lpc", "go flag test")
// 解析命令行参数
flag.Parse()
// 使用。name是一个指针,需要根据指针解引用,来获取真实的值
fmt.Println("hello ", *name)
2.原理介绍
上一节简单介绍了flag包的使用,其背后的原理也很值得大家思考。
首先需要理解FlagSet的概念,FlagSet的官方定义如下:
A FlagSet represents a set of defined flags.
直译就是FlagSet代表一个flag的集合。
在具备FlagSet概念之后,我们再来回顾Flag的使用。
- 设置阶段,就是往FlagSet中插入一条flag记录,返回一个指向flag所代表的值的指针,flag记录中包括默认值,flag名称,用法;
- 解析阶段,根据程序实际运行时参数的指定,覆盖默认值;
- 使用阶段,根据设置阶段返回的指针,来获取flag的值。
3.总结
flag包是Golang的官方包,有很多有趣的程序是在flag包上进行开发的,比如spf13/cobra感兴趣的朋友可以研究一下,很精彩。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!