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

上一篇 下一篇

猜你喜欢

热点阅读