golang命令行参数解析
Posted traditional
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang命令行参数解析相关的知识,希望对你有一定的参考价值。
golang的命令行参数解析,推荐两种。一个是os.Args
,另一个是使用flag
模块
os.Args
package main
import (
"fmt"
"os"
)
func main() {
args := os.Args
//使用go run xx.go 1 2 3 xx aaa bbb ccc ddd eee
//那么args就是[xx.exe 1 2 3 xx aaa bbb ccc ddd eee]
//并且全部是string类型
fmt.Println(args)
}
flag
flag模块可以支持使用关键字的方式指定参数
package main
import (
"flag"
"fmt"
)
func main() {
//flag.Type里面接受三个参数,指定的名字,默认值,描述信息
Name := flag.String("name", "mashiro", "姓名")
Age := flag.Int("age", 16, "年龄")
Has_bf := flag.Bool("has_bf", false, "有男朋友?")
//解析
flag.Parse()
/*
我们在命令行中便可以通过name satori age 16 has_bf false这种方式指定
当然还可以使用其他方式比如 --name satori, -name satori, --name=satori,-name=satori
*/
//但是注意:得到的Name、Age、Has_bf都是指针
fmt.Println(*Name, *Age, *Has_bf)
}
flag的其他参数
package main
import (
"flag"
"fmt"
)
func main() {
Name := flag.String("name", "mashiro", "姓名")
Age := flag.Int("age", 16, "年龄")
Has_bf := flag.Bool("has_bf", false, "有男朋友?")
flag.Parse()
fmt.Println(*Name, *Age, *Has_bf)
//命令行后的其他参数,是一个[]string类型
fmt.Println(flag.Args())
//命令行后的其他参数个数
fmt.Println(flag.NArg())
//命令行使用的参数个数
fmt.Println(flag.NFlag())
}
我们后面多指定了,a b c 1,所以可以通过flag.Args来获取,flag.NArgs就是多指定的参数个数,flag.NFlag则是我们在命令行,通过指定关键字的方式指定的参数个数,这里是2,因为has_bf我们没有指定,但即便如此也是打印了默认值的
flag模块还可以使用一种方式,flag.TypeVar,这和flag.Type是基本类似的
package main
import (
"flag"
"fmt"
)
func main() {
var Name string
var Age int
var Has_bf bool
flag.StringVar(&Name, "name", "mashiro", "姓名")
flag.IntVar(&Age, "age", 16, "年龄")
flag.BoolVar(&Has_bf, "has_bf", false, "有男朋友?")
flag.Parse()
fmt.Println(Name, Age, Has_bf)
fmt.Println(flag.Args())
fmt.Println(flag.NArg())
fmt.Println(flag.NFlag())
}
flag.Type是直接返回一个指针,flag.TypeVar则是需要先声明变量,然后把指针传进去,至于后面的参数、以及结果都是一样的。
以上是关于golang命令行参数解析的主要内容,如果未能解决你的问题,请参考以下文章