使用 Go 开发命令行应用
作为一个程序员,命令行工具是我们再熟悉不过的了,我们每天或多或少都会用到命令行工具。比如项目构建、打包、启动等等。那么如何用 Go 语言编写类似的工具呢?调研了下,大概有下面三种方法:
- os.Args 函数
os.Args 功能类似于 Shell 脚本的$@
功能,获取到命令行输入,然后进行人工解析处理,这种方式对于编写简单的工具还行,对于复杂点的工具,光解析输入参数就是一场"灾难"了。 - 使用 Go 标准 flag 包
flag 包是 Golang 官方提供的命令行参数解析包,省去人工解析工作,对于构建一个一般功能的命令行应用足够了,但是对于复杂应用还是显得比较麻烦。 - 使用第三方包 cli 或者 cobra
使用第三方包就比较专业了,提供的功能更加丰富,使用起来也很顺手。目前对于 Golang 命令行应用开发业界比较主流的就是 cli 和 cobra 了。其实两者的流行度差不多,cobra 的学习成本稍微高点,而且更加专业,看文档介绍,Kubernetes、Moby、rkt、etcd 等都是基于 cobra 构建。我个人更推荐使用 cli,因为 cli 比较轻量级、容易学习,使用起来也更加得心应手,对于开发日常应用足够了。
本文主要介绍后面两种方式,即 flag 包和第三方包 cli 的使用,对于 cobra 的使用这里不做具体介绍。
使用 flag 包构建命令行应用
flag 包的使用很简单,能很方便地解析命令行输入,支持的命令行参数类型有 bool, int, uint, string, time.Duration, float 类型,另外还可以自定义类型。这里介绍下一般的使用方法,假如要开发一个命令行工具,使用方式:
./go-