在 Golang 程序中有很多种方法来处理命令行参数。简单的情况下可以不使用任何库,直接处理 os.Args;其实 Golang 的标准库提供了 flag 包来处理命令行参数;还有第三方提供的处理命令行参数的库,比如 Pflag 等。

flag包提供了一系列解析命令行参数的功能接口 (推荐学习:go)

命令行语法

命令行语法主要有以下几种形式

-flag //只支持bool类型-flag=x-flag x //只支持非bool类型
cmd -x *

*为0,false有可能表示一个文件名或文件,也有可能表示x标签的值为0或false,会产生二义性,因此规定第三种只支持非bool类型。对于整形flag,合法的值可以为1234, 0664,0x1234或负数等。对于布尔型flag,可以为1, 0, t, f, T, F,true, false, TRUE, FALSE, True, False等

命令行参数解析方法

使用flag主要包括以下几步

定义flag参数,有三种方式

通过flag.String(), Bool(), Int() 等flag.Xxx()方法,该种方式返回一个相应的指针

import "flag"var ip = flag.Int("flagname", 1234, "help message for flagname")

通过flag.XxxVar()方法将flag绑定到一个变量,该种方式返回值类型,如

var flagvar intfunc init() {    flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")}

通过flag.Var()绑定自定义类型,自定义类型需要实现Value接口(Receives必须为指针),如

flag.Var(&flagVal, "name", "help message for flagname")

对于这种类型的flag,默认值为该变量类型的初始值

调用flag.Parse()解析命令行参数到定义的flag

flag.Parse()

解析函数将会在碰到第一个非flag命令行参数时停止,非flag命令行参数是指不满足命令行语法的参数,如命令行参数为cmd --flag=true abc则第一个非flag命令行参数为“abc”

调用Parse解析后,就可以直接使用flag本身(指针类型)或者绑定的变量了(值类型)

fmt.Println("ip has value ", *ip)fmt.Println("flagvar has value ", flagvar)

还可通过flag.Args(), flag.Arg(i)来获取非flag命令行参数

更多相关文章

  1. 详解golang中的不定参数
  2. golang如何传不定参数
  3. golang不定长参数写法
  4. golang如何判断数据类型
  5. golang数据类型有哪些
  6. golang 如何类型转换
  7. go语言数据类型转换教程
  8. golang怎么把字符串转成Int类型
  9. golang判断错误类型的方法

随机推荐

  1. golang为什么那么火?
  2. Gin 中实现 HTTP Basic Auth
  3. go语言中的结构体与方法详解
  4. golang适合web开发吗?
  5. 详解 Go 中的不可变类型
  6. Golang 可以反编译吗?
  7. golang是否值得深入学习?
  8. GO语言中=和:=的区别介绍
  9. Go 语言中的 Context 详解
  10. golang是go语言吗?