TypechoJoeTheme

Toasobi的博客

7.28 常用标准库 - flag

本文最后更新于2022年07月28日,已超过784天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

1.1.1 os.Args

获取命令行参数。下面举例

func main() {
    //os.Args是一个[]string
    if len(os.Args) > 0 {
        for index, arg := range os.Args {
            fmt.Printf("args[%d]=%v\n", index, arg)
        }
    }
}

两次输出如下:
os.Args是一个存储命令行参数的字符串切片,它的第一个元素是执行文件的名称
!

1.1.2 flag包的基本使用

flag包的作用是可以在命令行输入参数并赋值给代码内变量
要使用首先当然是要导入flag包

flag参数类型、

flag包支持的命令行参数类型有bool、int、int64、uint、uint64、float float64、string、duration。

flag参数有效值
字符串flag合法字符串
整数flag1234、0664、0x1234等类型,也可以是负数。
浮点数flag合法浮点数
bool类型flag1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False。
时间段flag任何合法的时间段字符串。如”300ms”、”-1.5h”、”2h45m”。
合法的单位有”ns”、”us” /“µs”、”ms”、”s”、”m”、”h”。

下面讲解如何定义flag包参数

1.1.3 定义命令行flag参数

有两种方式

flag.Type()

var name string
var age int
var married bool
var delay time.Duration
flag.StringVar(&name, "name", "张三", "姓名")
flag.IntVar(&age, "age", 18, "年龄")
flag.BoolVar(&married, "married", false, "婚否")
flag.DurationVar(&delay, "d", 0, "时间间隔")

flag.TypeVar()

var name string
var age int
var married bool
var delay time.Duration
flag.StringVar(&name, "name", "张三", "姓名")
flag.IntVar(&age, "age", 18, "年龄")
flag.BoolVar(&married, "married", false, "婚否")
flag.DurationVar(&delay, "d", 0, "时间间隔")

两者十分相似

定义好之后要使用需要通过flag.Parse()来对命令行参数进行解析
支持的命令行参数格式有以下几种:

  • -flag xxx (使用空格,一个-符号)
  • --flag xxx (使用空格,两个-符号)
  • -flag=xxx (使用等号,一个-符号)
  • --flag=xxx (使用等号,两个-符号)

其中,布尔类型的参数必须使用等号的方式指定。

1.1.4 flag其他函数

  • flag.Args() ////返回命令行参数后的其他参数,以[]string类型
  • flag.NArg() //返回命令行参数后的其他参数个数
  • flag.NFlag() //返回使用的命令行参数个数


    1.1.5 完整示例与讲解

    func main() {
      //定义命令行参数方式1
      var name string
      var age int
      var married bool
      var delay time.Duration
      flag.StringVar(&name, "name", "张三", "姓名")
      flag.IntVar(&age, "age", 18, "年龄")
      flag.BoolVar(&married, "married", false, "婚否")
      flag.DurationVar(&delay, "d", 0, "延迟的时间间隔")
    
      //解析命令行参数
      flag.Parse()
      fmt.Println(name, age, married, delay)
      //返回命令行参数后的其他参数
      fmt.Println(flag.Args())
      //返回命令行参数后的其他参数个数
      fmt.Println(flag.NArg())
      //返回使用的命令行参数个数
      fmt.Println(flag.NFlag())
    }

    在没有输任何参数时的输出:
    ![image.png]
    我们可以使用-help命令来查看命令行参数的使用提示

    现在我们来使用flag
    !
    一定要注意duration的单位和bool值加等号

朗读
赞(0)
评论 (0)