背景

golang 中有一个好用的 flag 包
一个执行文件,我们可以启用不同的参数来控制程序的行为,如果程序希望做到

  • 启动参数用户可配
  • 启动参数有说明
  • 启动参数有默认值
    我们该怎么做呢?这时候 flag 包就起到作用了
示例
func main() {
	// 设置
	port = flag.Int("port", 1234, "解释xxx")
	// 解析
	flag.Parse()
	fmt.Println("端口号:", *port)
}

这个时候我在终端运行

$ go run main.go -h
Usage of /xxxxx
  -port int
        解释xxx (default 1234)

$ go run chatServer.go
端口号: 1234

$ go run chatServer.go -port 1111
端口号: 1111

可以看到 flag 设置的启动参数是 port,参数的默认值是 1234,当使用-h查看帮助时候,参数的说明是“解释xxx”

其他

有一些很有意思也很知名的基于 flag 的开源项目,比如 spf13/cobra,很多大型的开源项目都使用了 cobra,比如 k8s