聊一聊Go编写的命令行工具类

本文介绍了如何使用Go语言的flag包创建命令行工具,包括原生flag包的使用、命令分级、子命令的实现以及如何自定义命令调用。通过示例展示了如何处理多级调用,并给出了自定义分支调用的实现方式,帮助读者理解Go中命令行工具的构建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

命令行工具

原生flag包

Go原生在flag包提供了一个命令行工具类,它可以让我们执行类似命令行的赋参操作,经常被运用于工具类,特别是数据处理过程,可以方便我们进行参数可视化注解。

flag包提供了多个常用类型的赋值方法,如String, Int, Bool, Float64, Duration等。

  • 通过flag.XXXType()函数可以对参数名称,默认值,描述进行定义
  • flag.parse()用于指定程序开始解析传入的命令行变量
  • 参数-h可以调用flag内置的usage()方法, 把参数描述打印出来

下面列举一个简单的例子。

用法示例:
func main() {
   

	//声明接收变量, 注意返回的是个指针类型
	wordParam := flag.String("word", "defaultValue", "Desc param 1 for something.")
	numParam := flag.Int("number", 0, "Desc param 2 for integer number.")

	//an existing var declared elsewhere in the program
	ok := AllRight()

	flag.BoolVar(&ok, "ok", false, "Desc value for boolean.")

	flag.Parse()

	log.Printf("Flag for wordParam: %s", *wordParam)
	log.Printf("Flag for wordParam: %d", *numParam)
	log.Printf("Flag for inner bool value : %v", ok)
}

func AllRight() bool {
   
	return true
}

我们通过command line 传参给可执行程序,输出:

$ ./tool.exe -word=hello -number=6
2020/03/18 10:59:49 Flag for wordParam: hello
2020/03/18 10:59:49 Flag for wordParam: 6
2020/03/18 10:59:49 Flag for inner bool value : false

如果使用-h/--help命令可以调出参数提示,输出:

$ ./tool.exe -h
Usage of E:\Code\GoWork\src\HelloGo\basic\flag\tool.exe:
  -number int
        Desc param 2 for integer number.
  -ok
        Desc value for boolean.
  -word string
        Desc param 1 for something. (default "defaultValue")

flag分级用法

在实际应用环境,调用目标可能有多个,有时我们需要多个命令,多个参数联合起来,用于调用不同的方法,类似于参数调用子命令的参数,
如:./cmd foo -a="a" -b=1或者./cmd bar -c="c" -d=2

Subcommands

原生flag包提供了一个子命令构造方式,NewFlagSet用于返回子命令的flag,示例如下:

我们定义一个解析子命令方法:

func SubCommands() {
   
	//param1: 命令参数, param2: 错误退出码
	fooCmd := flag.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值