go语言标准库之命令行参数

go语言中通过os包或者flag包可以获取命令行中运行命令的参数

  • 使用os.Args解析不带参数名的命令行参数
  • 使用flag包解析带参数名的命令行参数

    一、通过os包来获取

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. func main() {
  7. //通过range来获取
  8. for idx, val := range os.Args {
  9. fmt.Printf("index:%d, value:%s ", idx, val)
  10. }
  11. //通过判断参数的长度
  12. length := len(os.Args)
  13. if length == 1 {
  14. fmt.Printf("usage:%s %s", os.Args[0], "[options]")
  15. } else if length == 2 {
  16. action := os.Args[1]
  17. fmt.Printf("action:%s", action)
  18. } else if length == 3 {
  19. action := os.Args[1]
  20. port := os.Args[2]
  21. fmt.Printf("%s running on port %s ", action, port)
  22. }
  23. }

编译运行以上程序:

  1. go build src/args.go
  2. ./args start 6060

第一段输出为:

  1. index:0, value:./args
  2. index:1, value:start
  3. index:2, value:6060
  4. start running on port 6060

二、通过flag包来获取

1、主要形式
  • command -flag flagValue :
    ./args -c data/cfg.json
  • command -flag=flagValue:
    如./args -c=data/cfg.json(只支持非bool型的参数)
  • command -flag:
    ./args -v(只支持bool型的参数)
2、flag包使用过程
  • 接收参数(或叫定义参数) (使用flag.String/flag.Bool/flag.Int等flag.Xxx()方法)
  • 解析参数(flag.Parse())
  • 使用参数(解析出来的是参数的指针,所以需要使用*flagName类似这样的引用其值)
3、实例说明:
(1)使用flag.String()类似的方法
  1. package main
  2. import (
  3. "fmt"
  4. "flag"
  5. )
  6. func main() {
  7. //第一种,如 ./args -c data/cfg.json这种或者./flag -c=data/cfg.json
  8. cfg := flag.String("c", "cfg.json", "configure file")
  9. flag.Parse()
  10. fmt.Println(*cfg) //输出的是data/cfg.json
  11. //第二种:如./args -v
  12. /*
  13. d := flag.Bool("d", false, "daemon flag")
  14. flag.Parse()
  15. fmt.Println(*d)
  16. */
  17. }

注:
flag.String用法如下:

  • 用法:flag.String(flagName string, value string, usage string)
  • 参数:
    • flagName为参数名
    • value为默认值
    • usage为使用提示语
(2)使用flag.StringVar()类似的方法
  1. package main
  2. import (
  3. "fmt"
  4. "flag"
  5. )
  6. func main() {
  7. var daemon bool
  8. flag.BoolVar(&daemon, "d", false, "daemon flag")
  9. flag.Parse()
  10. fmt.Println(daemon)
  11. }

注:BoolVar用法

  • 用法:flag.BoolVar(flagPointer *bool, name string, value string, usage string)
  • 参数说明:
    • flagPointer用于绑定的参数指针变量
    • name为参数名
    • value为参数默认值
    • usage表示参数使用提示语