Go 带参数的Main方法
2019-03-13 本文已影响0人
雨生_
看一下大名鼎鼎的Hello World
func main() {
println("Hello world!")
}
比较与C#,Java等变成语言的main方法,Go的没有了args[]数组参数了,是否意味着,启动Go程序的时候,不能通过传入参数来动态控制执行模式了呢?
大部分的企业执行Console程序,都是通过Main函数里面的参数,来控制执行的模式,这个有一定经验的程序员肯定是不陌生的。
Go语言通过另一种方式(flag包),来注入我们想要的参数,简化了main函数。
代码如下:
package main
import "flag"
var name string
func init() {
flag.StringVar(&name,"name","default","log in user")
}
func main() {
flag.Parse()//暂停获取参数
println(name)
}
这里通过Terminal看一下结果:
D:\GoWork\HelloGoStudy\src\Article\MainFunc>go run demo1.go -name Alex
Alex
D:\GoWork\HelloGoStudy\src\Article\MainFunc>go run demo1.go
default
通过上面两个执行的结果就不难看出,flag的方法将name先初始化,然后检查传入的参数,没有的话,就默认是default了。
通过-help方法,我们也可以查看需要传入的参数
这里我加了一个参数password,然后执行下面的命令可以得到:
D:\GoWork\HelloGoStudy\src\Article\MainFunc>go run demo1.go -help
Usage of C:\Users\JIANGY~1\AppData\Local\Temp\go-build714974982\b001\exe\demo1.exe:
-name string
log in user (default "default")
-password string
log in user's password
exit status 2
细心的小伙伴可能发现了,StringVar
与之类似的还有一个 String
方法,我们看一下源代码吧:
// StringVar defines a string flag with specified name, default value, and usage string.
// The argument p points to a string variable in which to store the value of the flag.
func StringVar(p *string, name string, value string, usage string) {
CommandLine.Var(newStringValue(value, p), name, usage)
}
// String defines a string flag with specified name, default value, and usage string.
// The return value is the address of a string variable that stores the value of the flag.
func (f *FlagSet) String(name string, value string, usage string) *string {
p := new(string)
f.StringVar(p, name, value, usage)
return p
}
从上面的代码就可以看到,String方法本质上也是调用了StringVar方法,只不过是他帮你创建了接收的String对象,并返回给你了,两者没有差别,按照情况写就可以了。
相关链接
Go 系列学习目录
Package flag API 官方文档
GitHub代码 - HelloGoStudy
代码路径:src/Article/MainFunc/Demo1.go