http://blog.csdn.net/delphiwcdj/article/details/17202347
Go语言通过使用标准库里的flag包来处理命令行参数。
Package flag implements command-line flag parsing.
http://golang.org/pkg/flag/
http://golang.org/pkg/
几点注意事项:
1,通过flag.String(), Bool(), Int()等方式来定义命令行中需要使用的flag。
2,在定义完flag后,通过调用flag.Parse()来进行对命令行参数的解析。
3,命令行参数的格式可以是:
-flag xxx (使用空格,一个 - 符号)
--flag xxx (使用空格,两个 - 符号)
-flag=xxx (使用等号,一个 - 符号)
--flag=xxx (使用等号,两个 - 符号)
其中,布尔类型的参数防止解析时的二义性,应该使用等号的方式指定。
测试用例:
- package main
-
- import (
- "flag"
- "fmt"
- )
-
- var Input_pstrName = flag.String("name", "gerry", "input ur name")
- var Input_piAge = flag.Int("age", 20, "input ur age")
- var Input_flagvar int
-
- func Init() {
- flag.IntVar(&Input_flagvar, "flagname", 1234, "help message for flagname")
- }
-
- func main() {
- Init()
- flag.Parse()
-
- // 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
- // Args returns the non-flag command-line arguments
- // NArg is the number of arguments remaining after flags have been processed
- fmt.Printf("args=%s, num=%d\n", flag.Args(), flag.NArg())
- for i := 0; i != flag.NArg(); i++ {
- fmt.Printf("arg[%d]=%s\n", i, flag.Arg(i))
- }
-
- fmt.Println("name=", *Input_pstrName)
- fmt.Println("age=", *Input_piAge)
- fmt.Println("flagname=", Input_flagvar)
- }
-
- /*
- output:
- mba:filter gerryyang$ ./test_flag --name "aaa" -age=123 -flagname=0x11 para1 para2 para3
- args=[para1 para2 para3], num=3
- arg[0]=para1
- arg[1]=para2
- arg[2]=para3
- name= aaa
- age= 123
- flagname= 17
- */
参考:
标准库—命令行参数解析flag
http://www.01happy.com/golang-command-line-arguments/
部署golang项目时难免要通过命令行来设置一些参数,那么在golang中如何操作命令行参数呢?可以使用os库和flag库。
golang os库获取命令行参数
os可以通过变量Args来获取命令参数,os.Args返回一个字符串数组,其中第一个参数就是执行文件本身。
1 2 3 4 5 6 7 8 9 10 | package main
import (
"fmt"
"os"
)
func main() {
fmt.Println(os.Args)
}
|
编译执行后执行
$ ./cmd -user="root" [./cmd -user=root]
这种方式操作起来要自己封装,比较费时费劲。golang提供了flag库,可以很方便的操作命名行参数,下面介绍下flag的用法。
golang flag获取命令行参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package main
import (
"flag"
"fmt"
)
func main() {
ok := flag.Bool( "ok" , false, "is ok" )
id := flag.Int( "id" , 0 , "id" )
port := flag.String( "port" , ":8080" , "http listen port" )
var name string
flag.StringVar(&name, "name" , "123" , "name" )
flag.Parse() // 这一句至关重要!!必须先解析才能拿到参数值
fmt.Println( "ok:" , *ok)
fmt.Println( "id:" , *id)
fmt.Println( "port:" , *port)
fmt.Println( "name:" , name)
}
|
像flag.Int、flag.Bool、flag.String这样的函数格式都是一样的,第一个参数表示参数名称,第二个参数表示默认值,第三个参数表示使用说明和描述。flag.StringVar这样的函数第一个参数换成了变量地址,后面的参数和flag.String是一样的。
使用flag来操作命令行参数,支持的格式如下:
-id=1 --id=1 -id 1 --id 1
还是非常方便的。
执行一下:
$ go run flag.go -id=2 -name="golang" ok: false id: 2 port: :8080 name: golang
使用-h参数可以查看使用帮助:
$ go run flag.go -h -id=0: id -name="123": name -ok=false: is ok -port=":8080": http listen port
posted on 2017-06-21 11:52
思月行云 阅读(1860)
评论(0) 编辑 收藏 引用 所属分类:
Golang