golang 获取命令行参数

golang 获取命令行参数1 获取命令行参数 main gopackage mainimport fmt os func main var s sep string for i

欢迎大家来到IT世界,在知识的湖畔探索吧!

1 获取命令行参数

main.go

package main import ( "fmt" "os" ) func main() { var s, sep string for i := 0; i < len(os.Args); i++ { s += sep + os.Args[i] sep = " " } fmt.Println(s) fmt.Println(os.Args[1:]) //输出切片 }

欢迎大家来到IT世界,在知识的湖畔探索吧!

使用方法

D:\Go\study\src>go build main.go

D:\Go\study\src>bingfa.exe -a -b -c -d

bingfa.exe -a -b -c -d

[-a -b -c -d]

程序说明:

1.获得命令行参数需要使用包”os”;

2.命令行参数通过包”os”传递, 参数存放在切片(slice)中, 其名字为os.Args[], os.Args[0]是命令本身, 其他的os.Args[i]则是命令的各个选项;

3.包”os”中, 还有os.Stdin等, 其含义一目了然;

实例: 获取命令行参数

欢迎大家来到IT世界,在知识的湖畔探索吧!package main //必须有个main包 import( "fmt" "os" //os.Args 所需的包 ) func main(){ args := os.Args //获取用户输入的所有参数 //如果用户没有输入, 或参数个数不够, 则调用该函数提示用户 if args == nil || len(args) < 2{ fmt.Println("err: xxx ip port") return } ip := args[1] //获取输入的第一个参数 port := args[2] //获取输入的第二个参数 fmt.Printf("ip = %s, port = %s\n", ip, port) //ip = 127.0.0.1, port = 88889 fmt.Println(len(args)) }

执行方法:

go build getCommandParam.go
欢迎大家来到IT世界,在知识的湖畔探索吧!getCommandParam 127.0.0.1 8888

ip = 127.0.0.1, port = 8888

3

go run getCommandParam.go 127.0.0.1 3369

ip = 127.0.0.1, port = 3369

3

2 flag包对命令行参数的解析

上面的参数解析只是从命令行当中把参数存储在os.Args切片当中, 应用的时候, 不是很方便, 特别是, 编译好的一个可执行文件, 别人不知道如何使用的时候,

可以使用Go内置的flag包对参数进行说明, 并可设置默认值。

flag包的使用方法

flag.Type(“flagName”,defaultValue,”help message”) *Type

flag包依据Type的类型, 和参数标志flagName, 对标志flagName设置默认值和帮助信息, 最终返回一个指向该类型的指针, 可以通过指针是否为空来判断命令行里是否使用该标志参数, 下面是一个例子。

欢迎大家来到IT世界,在知识的湖畔探索吧!package main import ( "flag" "fmt" ) var b = flag.Bool("b", false, "bool类型参数") //bool型的数据不需要输入值, 否则会导致后面的参数无法接收 var s = flag.String("s", "", "string类型参数") func main() { flag.Parse() fmt.Println("-b:", *b) fmt.Println("-s:", *s) fmt.Println("其他参数:", flag.Args()) }

$ go run main.go

-b: false

-s:

其他参数: []

$ go run main.go -b

-b: true

-s:

其他参数: []

$ go run main.go -b -s test others

-b: true

-s: test

其他参数: [others]

$ go run main.go -help

Usage of /tmp/go-build0/command-line-arguments/_obj/exe/main:

-b bool类型参数

-s string

string类型参数

exit status 2

步骤:

1 定义参数

使用flag包, 首先定义待解析命令行参数, 也就是以”-“开头的参数, 比如这里的 -b -s -help等。-help不需要特别指定, 可以自动处理。

这里指定了两个参数,-b和-s:

var b = flag.Bool(“b”, false, “bool类型参数”)

var s = flag.String(“s”, “”, “string类型参数”)

原型:

func Bool(name string, value bool, usage string) *bool

func String(name string, value string, usage string) *string

通过flag.Bool和flag.String, 建立了2个指针b和s, 分别指向bool类型和string类型的变量。所以后续要通过 *b 和 *s 使用变量值。

flag.Bool和flag.String的参数有3个, 分别是命令行参数名称, 默认值, 提示字符串。

参数 功能

name 命令行参数名称, 比如 -b, -help

value 默认值, 未显式指定的参数, 给出隐式的默认值, 比如本例中-b未给出的话, *b=false

usage 提示信息, 如果给出的参数不正确或者需要查看帮助 -help, 那么会给出这里指定的字符串

2 解析参数

flag使用前, 必须首先解析:

flag.Parse()

3 使用参数

上文已经说明, 通过flag方法定义好的参数变量指针, 通过间接引用操作即可使用其内容:

fmt.Println(“-b:”, *b)

fmt.Println(“-s:”, *s)

4 未解析参数

参数中没有能够按照预定义的参数解析的部分, 通过flag.Args()即可获取, 是一个字符串切片。

fmt.Println(“其他参数:”, flag.Args())

需要注意的是, 从第一个不能解析的参数开始, 后面的所有参数都是无法解析的。即使后面的参数中含有预定义的参数:

$ go run main.go -b stop -s test others

-b: true

-s:

其他参数: [stop -s test others]

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/108111.html

(0)
上一篇 15分钟前
下一篇 5分钟前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信