在linux中,很多都程序都习惯用命令行传参。
如:
/usr/local/frp/frps -c /usr/local/frp/frps.ini
1. os.Args
对于Go,命令行参数是用os.Args这个string的切片来存储的。启动的时候,各参数以空格分割。os.Args的长度到少为1,第一个值就是应用自身的绝对路径,如上面的os.Args
为/usr/local/frp/frps
, 第二个值是-c
,第三个值是/usr/local/frp/frps.ini
依次类推。
可以根据自己的需求来解析需要的参数。
2. Flag包
Go 有flag包来解析参数,可以省掉很多麻烦。
2.1 支持参数形式
flag支持3种格式的参数
-flag
-flag=x
-flag x // x不能是bool值
2.1
提供的接口有:
func Bool(name string, value bool, usage string) *bool
func Int(name string, value int, usage string) *int
func Int64(name string, value int64, usage string) *int64
func Uint(name string, value uint, usage string) *uint
func Uint64(name string, value uint64, usage string) *uint64
func Float64(name string, value float64, usage string) *float64
func String(name string, value string, usage string) *string
- name: 获取参数的名字,如:
-c
中的c
- value: 默认值,没有对应名字参数时值
- usage: 帮助提示值,输入 –help时显示
- 返回值: 返回值都是指针。
2.2 例子
以前面test -c /usr/local/frp/frps.ini
参数为例
package main
import (
"flag"
"fmt"
)
func main() {
cfgfile := flag.Bool("c", "frps.ini", "输入frps配置文件路径")
flag.Parse() //解析输入的参数
fmt.Println("配置文件c:", *cfgfile)
}
输出
配置文件c: /usr/local/frp/frps.ini