1. flag包常用方法和函数

  1. flag 包的使用分为三个步骤:
  2. 1. 定义接收参数的变量,一般都把这些变量封装到一个结构体中
  3. 2. 注册变量到flag包,常用的类型有: stringintbool
  4. 3. 执行 Parse() 方法解析参数
  5. # 常用方法
  6. 1. flag.StringVar()
  7. Syntax: func StringVar(p *string, name string, value string, usage string)
  8. Man: StringVar用指定的名称、默认值、使用信息注册一个string类型flag,并将flag的值保存到p指向的变量。
  9. 2. flag.StringVar()
  10. Syntax: func IntVar(p *int, name string, value int, usage string)
  11. Man: IntVar用指定的名称、默认值、使用信息注册一个int类型flag,并将flag的值保存到p指向的变量。
  12. 3. flag.BoolVar()
  13. Syntax: func BoolVar(p *bool, name string, value bool, usage string)
  14. Man: BoolVar用指定的名称、默认值、使用信息注册一个bool类型flag,并将flag的值保存到p指向的变量。
  15. 4. flag.StringVar()
  16. Syntax: func Parse()
  17. Man: os.Args[1:]中解析注册的flag。必须在所有flag都注册好而未访问其值时执行。

2. 案例

flag 包常用在一个项目的配置 config 文件下进行参数处理,处理的过程一般写在 init() 函数中,用于从命令行接收参数作为全局配置,如数据库信息、日志等级等等。

  1. package config
  2. import "flag"
  3. type Config struct {
  4. Host string
  5. ListenPort int
  6. User string
  7. Password string
  8. Debug bool
  9. }
  10. var GlobalConfig Config
  11. func init() {
  12. flag.StringVar(&GlobalConfig.Host, "h", "127.0.0.1", "监听的IP")
  13. flag.IntVar(&GlobalConfig.ListenPort, "p", 8080, "监听的端口")
  14. flag.StringVar(&GlobalConfig.User, "u", "root", "登陆的用户")
  15. flag.StringVar(&GlobalConfig.Password, "pwd", "123456", "用户密码")
  16. flag.BoolVar(&GlobalConfig.Debug, "d", false, "是否开启debug模式")
  17. flag.Parse()
  18. }
  1. package main
  2. import (
  3. "fmt"
  4. "studygo/models/flag/config"
  5. )
  6. func main() {
  7. fmt.Println("Host:", config.GlobalConfig.Host)
  8. fmt.Println("Host:", config.GlobalConfig.ListenPort)
  9. fmt.Println("Host:", config.GlobalConfig.User)
  10. fmt.Println("Host:", config.GlobalConfig.Password)
  11. fmt.Println("Host:", config.GlobalConfig.Debug)
  12. }
  1. E:\Projects\Go\src\studygo\models\flag\main>go run main.go
  2. Host: 127.0.0.1
  3. Host: 8080
  4. Host: root
  5. Host: 123456
  6. Host: false