golang从诞生到现在不到十年,用户量确一路高涨,这个跟golang系统包提供很多开发者经常要用到的功能多少有些关系。一个更新的语言,在设计的时候会更多的结合众多开发者常见的需求,将常用的东西放到基础包,可以避免大量造轮子。golang基础包中flag包就是用来解决常见的命令行解析问题。下面来介绍下其基本用法:
1、命令行解析出来后对应的是代码中的变量,在flag包中获取的变量支持的类型有
1)bool
2)time.Duration
3 ) float64
4 ) int
5 ) int64
6 ) string
7 ) uint
8 ) uint64
2、将命令行输入值赋值到对应变量的方法:
1)bool类型对应:

         Bool(name string, value bool, usage string) *bool
         BoolVar(p *bool, name string, value bool, usage string)

2)time.Duration类型对应:

 Duration(name string, value time.Duration, usage string) *time.Duration
         DurationVar(p *time.Duration, name string, value time.Duration, usage string)

3)float64类型对应:

Float64(name string, value float64, usage string) *float64
Float64Var(p *float64, name string, value float64, usage string)

4)int类型对应:

Int(name string, value int, usage string) *int
IntVar(p *int, name string, value int, usage string)

5)int64类型对应:

Int64(name string, value int64, usage string) *int64
Int64Var(p *int64, name string, value int64, usage string)

6)string类型对应:

String(name string, value string, usage string) *string
StringVar(p *string, name string, value string, usage string)

7)uint类型对应:

Uint(name string, value uint, usage string) *uint
UintVar(p *uint, name string, value uint, usage string)

8)uint64类型对应:

Uint64(name string, value uint64, usage string) *uint64
Uint64Var(p *uint64, name string, value uint64, usage string)

3、默认值和用法说明:
获取命令行参数接口中value参数为默认值,usage参数为命令行使用说明。用programname + -h可以看到usage对应的字符串。

下面以一个例子来看看flag的使用方法:

package main

import (
    "flag"
    "fmt"
)

func init() {
    flag.Parse()
}

var lang = flag.String("lang", "golang", "the lang of the program")
var age = flag.Int64("age", 18, "the age of the user")
var safemod = flag.Bool("safemod", true, "whether using safemode")
flag.Bool()
func main() {
    fmt.Println("lang is: ", *lang)
    fmt.Println("age is: ", *age)
    fmt.Println("safemod is: ", *safemod)
}

直接运行结果如下:

lang is:  golang
age is:  18
safemod is:  true

-h 显示如下:

Usage of test.exe:
  -age int
        the age of the user (default 18)
  -lang string
        the lang of the program (default "golang")
  -safemod
        whether using safemode (default true)

从例子可以看出,绑定好变量后,直接调用flag.Parse()方法,就可以解析出命令行参数了。这个比C++中的getopt来的简单直观很多。