go flag包

 : jank    :   : 2456    : 2017-02-16 00:04  go

go语言通过使用标准库里的flag包来处理命令行参数。


使用flag主要包括以下几步

  1. 定义flag参数,有三种方式

    • 通过flag.String(), Bool(), Int() 等flag.Xxx()方法,该种方式返回一个相应的指针

      import "flag"var ip = flag.Int("flagname", 1234, "help message for flagname")
    • 通过flag.XxxVar()方法将flag绑定到一个变量,该种方式返回值类型,如

      var flagvar intfunc init() {
          flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
      }
    • flag.StringVar(&confFile, "c", "./conf/helloworld.conf", " set config file path")
    • 通过flag.Var()绑定自定义类型,自定义类型需要实现Value接口(Receives必须为指针),如

      flag.Var(&flagVal, "name", "help message for flagname")

      对于这种类型的flag,默认值为该变量类型的初始值

  2. 调用flag.Parse()解析命令行参数到定义的flag

    flag.Parse()

    解析函数将会在碰到第一个非flag命令行参数时停止,非flag命令行参数是指不满足命令行语法的参数,如命令行参数为cmd --flag=true abc则第一个非flag命令行参数为“abc”

  3. 调用Parse解析后,就可以直接使用flag本身(指针类型)或者绑定的变量了(值类型)

    fmt.Println("ip has value ", *ip)
    fmt.Println("flagvar has value ", flagvar)

    还可通过flag.Args()flag.Arg(i)来获取非flag命令行参数


示例:

package main

import (
	"flag"
	"fmt"
)

var music_file *string = flag.String("file", "musicfile", "Use -file <filesource>")

func main() {
	flag.Parse()
	fmt.Println(*music_file)
}

例如文件为flagTest.go

go run flagTest.go -file "../music/sun.mp3"

即可指定file参数的值。

如果直接使用

go run flagTest.go -file

则会提示你-file的使用说明.

-file="musicfile": Use -file <filesource>

如果执行程序不带有-file 那么flag.Sring()的第2个参数则为默认值


   

备案编号:赣ICP备15011386号

联系方式:qq:1150662577    邮箱:1150662577@qq.com