flag包提供命令行参数解析功能

常用属性

  • Usage:设置flag打印用法回调函数

    常用函数

  • Bool: 设置bool类型参数名、默认值、帮助信息并返回解析bool的指针

  • Int:设置Int类型参数名、默认值、帮助信息并返回解析Int的指针
  • Uint:设置Uint类型参数名、默认值、帮助信息并返回解析Uint的指针
  • Int64:设置Int64类型参数名、默认值、帮助信息并返回解析Int64的指针
  • Uint64:设置Uint64类型参数名、默认值、帮助信息并返回解析Uint64的指针
  • Float64:设置Float64类型参数名、默认值、帮助信息并返回解析Float64的指针
  • String: 设置String类型参数名、默认值、帮助信息并返回解析String的指针
  • Duration:设置Duration类型参数名、默认值、帮助信息并返回解析Duration的指针
  • BoolVar/IntVar/UintVar/Int64Var/Uint64Var/Float64Var/StringVar/DurationVar:设置

Duration 类型参数名、默认值、帮助信息并将解析值通过参数指针设置给变量

  • Parse:解析参数
  • PrintDefaults:打印参数详情信息
  • NFlag:匹配设置参数名的参数个数
  • NArg: 匹配未设置参数名的参数个数
  • Args: 获取所有未设置参数名的参数值

    实操

    main.go

    ```go package main

import ( “flag” “fmt” “time” )

func main() { addr := flag.String(“H”, “127.0.0.1”, “Listen Addr”) port := flag.Int(“p”, 8080, “Listen port”) interval := flag.Duration(“i”, 3 * time.Second, “heartbeat interval”) verbose := flag.Bool(“v”, false, “debug module”) help := flag.Bool(“h”, false, “help”)

  1. flag.Usage = func() {
  2. fmt.Println(`

Usage: flag [-H addr] [-p port] [-i 3s] [-v] [-h] args…

Options:`) flag.PrintDefaults() } flag.Parse()

  1. if *help {
  2. flag.Usage()
  3. } else {
  4. fmt.Printf("flag: %d, arg: %d\n", flag.NFlag(), flag.NArg())
  5. fmt.Println("flag:")
  6. fmt.Printf("\t%s: %#v\n", "name", *addr)
  7. fmt.Printf("\t%s: %#v\n", "port", *port)
  8. fmt.Printf("\t%s: %#v\n", "interval", *interval)
  9. fmt.Printf("\t%s: %#v\n", "verbose", *verbose)
  10. fmt.Println("arg:")
  11. for i, arg := range flag.Args() {
  12. fmt.Println("\t%d: %#v\n", i, arg)
  13. }
  14. }

}

  1. <a name="KPvWu"></a>
  2. ## 执行结果
  3. ```bash
  4. PS D:\projects\golangLearn\basicproject> go.exe run .\main.go
  5. flag: 0, arg: 0
  6. flag:
  7. name: "127.0.0.1"
  8. port: 8080
  9. interval: 3000000000
  10. verbose: false
  11. arg: