03.06 go語言通過flag包解析命令行參數

簡介

在Go程序編譯好就是一個二進制文件,我們希望通過不同的參數來執行不同的操作,官方就提供了一個flag包,來實現這個功能。


go語言通過flag包解析命令行參數


流程

<code>定義變量,註冊falg -> flag.Parse 解析,並賦值變量 -> 就可以通過變量值判斷執行對應的操作
/<code>

定義變量,註冊flag

  • 直接通過函數定義並賦值給變量(這裡返回的是一個指針變量,取值的時候記得加&)
<code>var number = flag.Int("n", 0, "get number from args")
/<code>

第一個參數是命令行參數名稱,第二個是默認值,第三個是參數提示內容

  • 也可以先聲明變量,然後再對變量進行註冊
<code>var number int
func init() {
\tflag.IntVar(&number, "n", 0,"get number from args")
}
/<code>

第一個參數是變量指針,第二個命令行參數名稱,第三個是默認值,第四個是參數提示內容


go語言通過flag包解析命令行參數


解析flag

直接調用Parse函數,就可以解析所有註冊的flag

<code>flag.Parse()
/<code>

參數形式

命令行 flag 的語法有如下三種形式:

<code>-flag // 只支持bool類型
-flag=x
-flag x // 只支持非bool類型
/<code>

變量使用

  • 如果使用 flag.Int 方式聲明的就需要通過&方式取值
<code>fmt.Println(&number)
/<code>
  • 如果是使用 flag.IntVar 方式聲明的就可以直接使用了。
<code>fmt.Println(number)
/<code>

註冊函數

以上是註冊int類型的參數,其他類似是類似的

<code>func Bool(name string, value bool, usage string) *bool
func BoolVar(p *bool, name string, value bool, usage string)
func Int(name string, value int, usage string) *int
func IntVar(p *int, name string, value int, usage string)
func Int64(name string, value int64, usage string) *int64
func Int64Var(p *int64, name string, value int64, usage string)
func Uint(name string, value uint, usage string) *uint
func UintVar(p *uint, name string, value uint, usage string)
func Uint64(name string, value uint64, usage string) *uint64
func Uint64Var(p *uint64, name string, value uint64, usage string)
func Float64(name string, value float64, usage string) *float64
func Float64Var(p *float64, name string, value float64, usage string)
func String(name string, value string, usage string) *string
func StringVar(p *string, name string, value string, usage string)
func Duration(name string, value time.Duration, usage string) *time.Duration
func DurationVar(p *time.Duration, name string, value time.Duration, usage string)

/<code>

例子



<code>package main

import (
\t"flag"
\t"fmt"
)

var number int

func init() {
\tflag.IntVar(&number, "n", -1, "get number from args")
\tflag.Parse()
}

func main() {
\tfmt.Println(number)
}
/<code>

如果執行的時候,-help或者-h,就會輸出最後定義的幫助信息

<code>./command1   -h
Usage of ./command1:
-n int
\tget number from args
/<code>

如果輸入非法的參數,就會輸出報錯和幫助信息

<code>./command1   -n a
invalid value "a" for flag -n: parse error
Usage of ./command1:
-n int
\tget number from args

/<code>

如果輸入正確,就可以正常獲取到對應的值,如果沒有傳值,就會使用默認值

<code>./command1   -n 100
100
/<code>


go語言通過flag包解析命令行參數


分享到:


相關文章: