go语言获取命令行参数

  1. os.Args
  2. flag
    1. 代码中使用
    2. 命令行中输入
    3. 其他

os.Args

这是符合简单使用的方式。

package main

import (
  "fmt"
  "os"
)

func main()  {
  fmt.Println(os.Args)

}

编译后并在命令行中输入:./args_test par1 par2 par3,会以空格分割。
输出:[./args_test par1 par2 par3]

// os.Args是一个[]string
os.Args[0]  // 是可执行文件本身
// 其他的元素以os.Args[n]取值

跟明显,上面这种方式是不能指定参数的,所以这里引入另一种方式:

flag

代码中使用

flag包支持的命令行参数类型有boolintint64uintuint64float64stringduration

flag 命令行中输入值
String 合法字符串
IntInt64UintUint64 123406640x1234等类型,也可以是负数
Float64 合法浮点数
Bool 1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False
Duration 任何合法的时间段字符串。单位有nsus /µsmssmh(如300ms-1.5h2h45m

flag用两种使用方式:

  • 1、返回数据类型的指针,不用自己提前声明 (如:flag.String())
    格式:变量(指针) := flag.String("参数名字", "默认值", "提示信息,可以--help显示")
    如:

    s := flag.String("name", "lczmx", "输入名字")
    fmt.Println(*s)
    
  • 将自己声明的指针传进flag中,不用接收值 (如:flag.StringVar())
    格式:

    var 变量
    flag.String(&变量,"参数名字", "默认值", "提示信息,可以--help显示")
    flag.Parse()
    // 之后就能操作该变量了
    

    如:

    var s string
    flag.String(&s, "name", "lczmx", "输入名字")
    flag.Parse()
    fmt.Println(s)
    

注:以上的String可以换成其他类型(Int、Bool、Float64、Duration等)
通过以上两种方法定义好命令行flag参数后,还需要通过调用flag.Parse()来对命令行参数进行解析。

完整例子:

package main

import (
  "flag"
  "fmt"
  "time"
)

func main() {
  // 第一种方式
  isOk := flag.Bool("isOk", false, "你ok吗?")
  t := flag.Duration("time", time.Second, "时间")
  // 第二种方式
  var age int
  flag.IntVar(&age, "age", 18, "年龄")

  flag.Parse()
  fmt.Println("isOk", *isOk)
  fmt.Println("time", *t)
  fmt.Println("age", age)
}

命令行中输入

命令行参数格式有以下几种,可以混用:

./main -age xxx
./main --age xxx
./main -age=xxx
./main --age=xxx

使用help:(-h、–h、–help、-help),输出:

Usage of /tmp/go-build771233563/b001/exe/main:
  -age int
        年龄 (default 18)
  -isOk
        你ok吗?
  -time duration
        时间 (default 1s)
exit status 2

其他

flag.Args()  ////返回命令行参数后的其他参数,以[]string类型
flag.NArg()  //返回命令行参数后的其他参数个数
flag.NFlag() //返回使用的命令行参数个数

作者: 忞翛

出处: https://www.lczmx.top/Golang/24ba96af909d/

版权: 本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

在线工具