Go语言main函数命令行

Go语言main函数命令行教程

Go 语言 程序的命令行,除了可以使用 os.Args 来获取,还可以通过 flag 包相关的 函数 来获取。

os.Args 获取方式只能根据索引一个个去遍历获取,但 flag 包提供的方式更为灵活,可以通过 key 和 value 的形式来获取。

Go语言解析命令行参数详解

语法

flag.StringVar(&user, "u", "root", "账号,默认为root") flag.IntVar(&port, "P", 3306, "端口号,默认为3306")

参数

参数 描述
StringVar 获取命令行参数的对应的类型,常用的有 IntVar,StringVar,BoolVar,Float64Var,Int64Var,Uint64Var,UintVar 等,分别用户获取 intstringboolfloat64,int64,uint64 和 uint 类型的参数。
&user 所获取的值,存储的变量。
u 命令行的 key。
root 命令行的默认值。
账号 文字说明。

说明

我们分别通过了 flag.StringVar 和 flag.IntVar 解析了命令行的字符串类型的参数和 int 类型的参数。

Go语言解析命令行参数详解

语法

flag.String("u", "root", "账号,默认为root") flag.Int("P", 3306, "端口号,默认为3306")

说明

这个获取命令行参数的形式类似于第一种,但这一种获取的命令行的值是通过 函数返回值 的形式返回的。

案例

命令行参数解析

通过 flag 包解析命令行参数

package main import ( "flag" "fmt" ) func main() { fmt.Println("嗨客网(www.haicoder.net)") // 定义几个变量,用于接收命令行的参数值 var user string var password string var host string var port int // &user 就是接收命令行中输入 -u 后面的参数值,其他同理 flag.StringVar(&user, "u", "root", "账号,默认为root") flag.StringVar(&password, "p", "", "密码,默认为空") flag.StringVar(&host, "h", "localhost", "主机名,默认为localhost") flag.IntVar(&port, "P", 3306, "端口号,默认为3306") // 解析命令行参数写入注册的flag里 flag.Parse() // 输出结果 fmt.Printf("user:%v\npassword:%v\nhost:%v\nport:%v\n", user, password, host, port) }

程序运行后,控制台输出如下:

42_golang 命令行参数.png

我们在 main 函数里面解析命令行参数,最后运行的时候,我们发现,我们指定了参数 u 和 p ,因此最终的 user 和 password 参数的值就是我们指定的值,而我们没有指定的参数 h 和 P ,就使用的是默认值。

命令行参数解析

通过 flag 包解析命令行参数

package main import ( "flag" "fmt" ) func main() { fmt.Println("嗨客网(www.haicoder.net)") // 定义几个变量,用于接收命令行的参数值 var user *string var password *string var host *string var port *int // &user 就是接收命令行中输入 -u 后面的参数值,其他同理 user = flag.String("u", "root", "账号,默认为root") password = flag.String("p", "", "密码,默认为空") host = flag.String("h", "localhost", "主机名,默认为localhost") port = flag.Int("P", 3306, "端口号,默认为3306") // 解析命令行参数写入注册的flag里 flag.Parse() // 输出结果 fmt.Printf("user:%v\npassword:%v\nhost:%v\nport:%v\n", *user, *password, *host, *port) }

程序运行后,控制台输出如下:

43_golang 命令行参数.png

这一种方法类似第一种,同样实现了命令行参数的解析。

Go语言命令行参数继续总结

flag 包提供的命令行参数解析的方式可以通过 key 和 value 的形式来获取。Go 语言解析命令行参数语法:

flag.StringVar(&user, "u", "root", "账号,默认为root") flag.IntVar(&port, "P", 3306, "端口号,默认为3306")

也可以使用:

flag.String("u", "root", "账号,默认为root") flag.Int("P", 3306, "端口号,默认为3306")