Golang Flag基本使用

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: Golang Flag基本使用

os.Args

如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数。

func main() {
  if len(os.Args) > 0 {
    for index, arg := range os.Args {
      fmt.Printf("args[%d]=%v\n", index, arg)
    }
  }
}
$ ./main.exe a b c 123 test for flag
args[0]=C:\main.exe
args[1]=a
args[2]=b
args[3]=c
args[4]=123
args[5]=test
args[6]=for
args[7]=flag

flag包参数类型

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

定义命令行flag参数

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

flag.Type()

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

例如我们要定义姓名、年龄、婚否三个命令行参数,我们可以按如下方式定义:

func main() {
  name := flag.String("name", "张三", "姓名")
  age := flag.Int("age", 18, "年龄")
  married := flag.Bool("married", false, "婚否")
  delay := flag.Duration("d", 0, "时间间隔")
}

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

flag.TypeVar()

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

例如我们要定义姓名、年龄、婚否三个命令行参数,我们可以按如下方式定义:

func main() {
  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参数后,需要通过调用flag.Parse()来对命令行参数进行解析。

flag.Parse()

那么“flag.Parse()”倒是是用来解析什么的?我们从“flag.Type()”看到这个函数返回了一个指针,比如在 flag.Bool 这里会新建一个bool类型的变量,将默认值赋值给它,然后返回这个bool类型的指针。在 Parse函数里,对这个指针所指向的值进行更新。


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


-flag xxx (使用空格,一个-符号)

–flag xxx (使用空格,两个-符号)

-flag=xxx (使用等号,一个-符号)

–flag=xxx (使用等号,两个-符号)

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

Flag解析在第一个非flag参数(单个”-“不是flag参数)之前停止,或者在终止符”–“之后停止。

flag其他函数

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

实例

package main
import (
  "flag"
  "fmt"
  "time"
)
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())
}
$ ./main.exe -name wxf -age 19 -married false -d 1ms
wxf 19 true 0s
[false -d 1ms]
3
3
$ ./main.exe -help
Usage of C:\Users\68725\Desktop\ZapTest\main.exe:
  -age int
        年龄 (default 18)
  -d duration
        延迟的时间间隔
  -married
        婚否
  -name string
        姓名 (default "张三")


目录
相关文章
|
6月前
|
Go 开发工具 git
7天玩转 Golang 标准库之 flag
7天玩转 Golang 标准库之 flag
48 2
|
6月前
|
JSON Go 开发工具
Golang日志库Zap基本使用
Golang日志库Zap基本使用
146 0
|
6月前
|
Go
Golang内置Log包的基本使用
Golang内置Log包的基本使用
76 0
|
11月前
|
Cloud Native Go C语言
golang flag 包的使用指北
golang flag 包的使用指北
|
测试技术 Go
Go 单测入门篇:Golang 单元测试基本使用
Go 单测入门篇:Golang 单元测试基本使用
|
运维 Go
学习golang(5) 初探:go 数组/slice 的基本使用
学习golang(5) 初探:go 数组/slice 的基本使用
122 0
|
运维 小程序 Go
学习golang(2) 初探:go map 基本使用
学习golang(2) 初探:go map 基本使用
113 0
|
程序员 Go API
golang实战之flag包
开发命令行程序时,经常需要接受命令行传入的参数,flag包提供了参数处理的功能,本文通过demo列出了常用API的用法
169 0
golang实战之flag包
|
Go
golang flag简单用法
版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.
1128 0