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来的简单直观很多。