zoukankan      html  css  js  c++  java
  • go flag 包基本使用

     

    有以下两种常用的定义命令行 flag 参数的方法:

    1) flag.Type()

    基本格式如下:

    flag.Type(flag 名, 默认值, 帮助信息) *Type

    Type 可以是 Int、String、Bool 等,返回值为一个相应类型的指针,例如我们要定义姓名、年龄、婚否三个命令行参数,我们可以按如下方式定义:

    1. name := flag.String("name", "张三", "姓名")
    2. age := flag.Int("age", 18, "年龄")
    3. married := flag.Bool("married", false, "婚否")
    4. delay := flag.Duration("d", 0, "时间间隔")

    需要注意的是,此时 name、age、married、delay 均为对应类型的指针。

    2) flag.TypeVar()

    基本格式如下:

    flag.TypeVar(Type 指针, flag 名, 默认值, 帮助信息)

    TypeVar 可以是 IntVar、StringVar、BoolVar 等,其功能为将 flag 绑定到一个变量上,例如我们要定义姓名、年龄、婚否三个命令行参数,我们可以按如下方式定义:

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

    flag.Parse()

    通过以上两种方法定义好命令行 flag 参数后,需要通过调用 flag.Parse() 来对命令行参数进行解析。

    支持的命令行参数格式有以下几种:

    • -flag:只支持 bool 类型;
    • -flag=x;
    • -flag x:只支持非 bool 类型。


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

    flag 包的其他函数:

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

    结合上面的介绍知识,我们来看一个实例,代码如下:

    1. package main
    2. import (
    3. "flag"
    4. "fmt"
    5. )
    6. var Input_pstrName = flag.String("name", "gerry", "input ur name")
    7. var Input_piAge = flag.Int("age", 20, "input ur age")
    8. var Input_flagvar int
    9. func Init() {
    10. flag.IntVar(&Input_flagvar, "flagname", 1234, "help message for flagname")
    11. }
    12. func main() {
    13. Init()
    14. flag.Parse()
    15. // After parsing, the arguments after the flag are available as the slice flag.Args() or individually as flag.Arg(i). The arguments are indexed from 0 through flag.NArg()-1
    16. // Args returns the non-flag command-line arguments
    17. // NArg is the number of arguments remaining after flags have been processed
    18. fmt.Printf("args=%s, num=%d\n", flag.Args(), flag.NArg())
    19. for i := 0; i != flag.NArg(); i++ {
    20. fmt.Printf("arg[%d]=%s\n", i, flag.Arg(i))
    21. }
    22. fmt.Println("name=", *Input_pstrName)
    23. fmt.Println("age=", *Input_piAge)
    24. fmt.Println("flagname=", Input_flagvar)
    25. }                                                                         运行结果如下:

      go run main.go -name "aaa" -age=123 -flagname=999
      args=[], num=0
      name= aaa
      age= 123
      flagname= 999

  • 相关阅读:
    Umbraco中更换IndexSet中的NodeType后,搜索页面没有做出对应更改的效果
    Umbraco部署到IIS中权限问题(back office没有权限新建template)
    C控制台密码输入:输入一个字符显示一个星号
    C项目实践--家庭财务管理系统
    C 编程中fseek、ftell的用法总结
    C ++模板的声明和实现为何要放在头文件中?
    头文件与cpp文件为什么要分开写
    printf、sprintf与fprintf 的用法区分
    C编程中fread 、fwrite 用法总结
    C从控制台(stdin)输入带空格的字符串到字符数组中
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/15555385.html
Copyright © 2011-2022 走看看