传参的两种方式
1. os.Args
引入 “os” 包,os.Args
是一个存储命令行参数的字符串切片,它的第一个元素是执行文件的名称
1 | package main |
将上面的代码执行 go build -o "args_demo"
编译之后执行:
1 | $ ./args_demo a b c d |
2. flag
flag
包支持的命令行参数类型有 bool、int、int64、uint、uint64、float64、string、duration
。
类型 | 方法 | 返回值 | 备注 |
---|---|---|---|
Bool | Bool,BoolVar |
*bool,无 |
允许 1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False |
Int | Int,IntVar |
*int,无 |
|
Int64 | Int64,Int64Var |
*int64,无 |
|
Uint | Uint,UintVar |
*uint,无 |
|
Uint64 | Uint64,Uint64Var |
*uint64,无 |
|
Float64 | Float64,Float64Var |
*float64,无 |
|
String | String,StringVar |
*string,无 |
|
Duration | Duration,DurationVar |
*duration,无 |
1. 定义参数
1. 结果保存在指针
语法 flag.类型(参数名, 默认值, 说明信息) *类型
,返回一个保存了该 flag 的值的指针,如下,此时 name、age、married、delay 均为对应类型的指针。
1 | name := flag.String("name", "flink", "平台") |
2. 绑定变量
语法 flag.TypeVar(Type指针, flag名, 默认值, 帮助信息)
,将 flag 的值保存到相应变量
1 | var name string |
2. 解析参数
1. flag.Parse()
支持的命令行参数格式有以下几种:
-flag
: 只支持bool类型-flag=xxx
: 支持任何类型-flag xxx
: 只支持非bool类型
其中,对于一个或两个-
号,效果一样。
flag 解析在第一个非flag参数(单个”-“不是flag参数)之前停止,或者在终止符”–”之后停止。
3. 其他函数
flag.NFlag()
: 返回解析时进行了设置的 flag 的数量flag.NArg()
: 返回解析 flag 之后剩余参数的个数flag.Args()
: 返回解析之后剩下的非 flag 参数,以 []string 类型flag.Args(i)
: 返回解析之后剩下的第 i 个参数,从 0 开始索引
4. 示例
定义
1 | package main |
使用
1 | // 方式一 |
帮助提示
1 | $ ./flag_demo -help |