命令行应用
命令行应用
命令行应用是最基础,也是最常见的入门应用;我们可以基于这些模板快速地开发一些实用的小工具。
flag
我们编写一个简单的示例,用于了解标准库
func main() {
var name string
flag.StringVar(&name, "name", "Go Series", "帮助信息")
flag.StringVar(&name, "n", "Go Series", "帮助信息")
flag.Parse()
log.Printf("name: %s", name)
}
通过上述代码,我们调用标准库
- -flag:仅支持布尔类型。
- -flag x:仅支持非布尔类型。
- -flag=x:均支持
同时
$ go run main.go -name=eddycjy -n=Test
name: Test

子命令的实现
在我们日常使用的
var name string
func main() {
flag.Parse()
args := flag.Args()
if len(args) <= 0 {
return
}
switch args[0] {
case "go":
goCmd := flag.NewFlagSet("go", flag.ExitOnError)
goCmd.StringVar(&name, "name", "Go 语言", "帮助信息")
_ = goCmd.Parse(args[1:])
case "php":
phpCmd := flag.NewFlagSet("php", flag.ExitOnError)
phpCmd.StringVar(&name, "n", "PHP 语言", "帮助信息")
_ = phpCmd.Parse(args[1:])
}
log.Printf("name: %s", name)
在上述代码中,我们首先调用了
const (
// 返回错误描述
ContinueOnError ErrorHandling = iota
// 调用 os.Exit(2) 退出程序
ExitOnError
// 调用 panic 语句抛出错误异常
PanicOnError
)
接下来我们运行针对子命令的示例程序,对正确和异常场景进行检查,如下:
$ go run main.go go -name=Customer
name: Customer