golang命令列解析
阿新 • • 發佈:2018-12-30
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來的簡單直觀很多。