1. 程式人生 > >golang命令列解析

golang命令列解析

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來的簡單直觀很多。