golang内置库 -- flag 的一般用法
针对flag内置库模块来做命令行解析
主要是负责做一系列middleware项目,首先用到的主要是利用flag库来做一些很简单的项目version的简介,local db来记录前端与第三方系统之间的order信息或者是operation,以及自测项目心跳。
目前用到的方法主要是参考下图
1 var ( 2 configFile string 3 ping bool 4 showVersion bool 5 generate bool 6 ) 7 8 flag.StringVar(&configFile, "f", "config/setting.yml", "config file") 9 flag.BoolVar(&ping, "ping", false, "Ping server.") 10 flag.BoolVar(&showVersion, "version", false, "Print version information.") 11 flag.BoolVar(&showVersion, "v", false, "Print version information.") 12 flag.BoolVar(&generate, "g", false, "Generate database tables.") 13 14 flag.Parse() 15 16 // Show version and exit 17 if showVersion { 18 fmt.Println(config.GetVersion()) 19 return 20 } 21 22 if ping { 23 if err = cfg.Pinger(); err != nil { 24 log.Warnf("ping server err: %v", errors.ErrorStack(err)) 25 } 26 return 27 } 28 29 if generate { 30 if err = generateDB(cfg); err != nil { 31 log.Error(err) 32 } 33 return 34 } 35 36
注意的点:
- flag.Xxx()返回的值是变量的内存地址,要获取值时要通过在变量前加*(星号)获取.
- 第一个 arg表示将默认值赋给参数
- 第二个 arg表示参数名称,在控制台的时候,提供给用户使用.
- 第三个 arg表示参数默认值
- 最后主要是对于命令行参数的一个说明。
- 从os.Args[1:]中解析注册的flag。必须在所有flag都注册好而未访问其值时执行。未注册却使用flag -help时,会返回ErrHelp。即:将输入的flag和注册的flag进行匹配解析
记录自己成长的道路

浙公网安备 33010602011771号