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进行匹配解析
posted @ 2020-10-24 20:39  Charlie-frankfud  阅读(400)  评论(0)    收藏  举报