Go 命令行参数

在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
0%