Go语言命令行参数解析 - flag
简介
在Go程序编译好就是一个二进制文件,我们希望通过不同的参数来执行不同的操作,官方就提供了一个flag包,来实现这个功能。
流程
定义变量,注册falg -> flag.Parse 解析,并赋值变量 -> 就可以通过变量值判断执行对应的操作
定义变量,注册flag
- 直接通过函数定义并赋值给变量(这里返回的是一个指针变量,取值的时候记得加&)
var number = flag.Int("n", 0, "get number from args")
第一个参数是命令行参数名称,第二个是默认值,第三个是参数提示内容
- 也可以先声明变量,然后再对变量进行注册
var number int
func init() {
flag.IntVar(&number, "n", 0,"get number from args")
}
第一个参数是变量指针,第二个命令行参数名称,第三个是默认值,第四个是参数提示内容
解析flag
直接调用Parse函数,就可以解析所有注册的flag
flag.Parse()
参数形式
命令行 flag 的语法有如下三种形式:
-flag // 只支持bool类型
-flag=x
-flag x // 只支持非bool类型
变量使用
- 如果使用 flag.Int 方式声明的就需要通过&方式取值
fmt.Println(&number)
- 如果是使用 flag.IntVar 方式声明的就可以直接使用了。
fmt.Println(number)
注册函数
以上是注册int类型的参数,其他类似是类似的
func Bool(name string, value bool, usage string) *bool
func BoolVar(p *bool, name string, value bool, usage string)
func Int(name string, value int, usage string) *int
func IntVar(p *int, name string, value int, usage string)
func Int64(name string, value int64, usage string) *int64
func Int64Var(p *int64, name string, value int64, usage string)
func Uint(name string, value uint, usage string) *uint
func UintVar(p *uint, name string, value uint, usage string)
func Uint64(name string, value uint64, usage string) *uint64
func Uint64Var(p *uint64, name string, value uint64, usage string)
func Float64(name string, value float64, usage string) *float64
func Float64Var(p *float64, name string, value float64, usage string)
func String(name string, value string, usage string) *string
func StringVar(p *string, name string, value string, usage string)
func Duration(name string, value time.Duration, usage string) *time.Duration
func DurationVar(p *time.Duration, name string, value time.Duration, usage string)
例子
package main
import (
"flag"
"fmt"
)
var number int
func init() {
flag.IntVar(&number, "n", -1, "get number from args")
flag.Parse()
}
func main() {
fmt.Println(number)
}
如果执行的时候,-help或者-h,就会输出最后定义的帮助信息
./command1 -h
Usage of ./command1:
-n int
get number from args
如果输入非法的参数,就会输出报错和帮助信息
./command1 -n a
invalid value "a" for flag -n: parse error
Usage of ./command1:
-n int
get number from args
如果输入正确,就可以正常获取到对应的值,如果没有传值,就会使用默认值
./command1 -n 100
100
- 原文作者:Linux运维菜
- 原文链接:https://www.opcai.top/post/2020/2020-03/golang_flag/
- 版权声明:本作品采用进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。