理解Go語言元件flag

2021-10-07 04:25:35 字數 1813 閱讀 1797

主要用來實現命令列的引數解析,以達到實現以下效果的目的

$ cmd -flagname 123
flag是go語言的內建包,能接收的引數型別主要有字串、布林和數值型別。

func main()
我們在main函式中呼叫flag.string函式來定義命令,該函式共有三個引數

同時該函式返回的是指標型別,列印變數ip時記得加上指標符號來輸出位址對應的值。在執行flag.string後,記得執行flag.parse來解析命令,否則不能執行成功。我們來測試一下,先鍵入乙個錯的引數,會得到以下提示。

go run main.go -i

flag provided but not defined: -i

usage of /var/folders/3s/5v6r481x17x5ks_7q1dzmlsw0000gp/t/go-build400337564/b001/exe/main:

-ip string

此處傳入ip位址 (default "127.0.0.1")

加上-ip引數和值,可以直接獲取到對應的值

go run main.go -ip 192.168.1.1

192.168.1.1

除了-ip 192.168.1.1這種形式外,以等號賦值的方式也是支援的

go run main.go -ip=192.168.1.1

192.168.1.1

現在什麼都不傳,可以直接拿到設定的預設值

go run main.go

127.0.0.1

除上述內容之外,還有一種寫法,我們再增加乙個埠號為例

var port int

func init()

func main()

首先定義乙個整型變數port,在init函式中呼叫flag.intvar函式,該函式與flag.string相比,少了返回值,且多乙個引數,第乙個引數是預先定義好的變數,為了方便intvar內部修改變數值,所以該引數傳引用型別。

如果我們想在接收引數值的過程當中做一些處理,那麼也可以自己進行實現。假如我們需要對傳入的使用者名稱user進行處理,加上乙個_suffix字尾。

type user string

func (u *user) string() string

func (u *user) set(value string) error

*u = user(value + "_suffix")

return nil

}

首先需要定義乙個型別,然後實現兩個方法string與set,在set方法中我對傳入的值進行了長度判斷,如果小於3個字元就丟擲錯誤,否則就將傳入的值拼接乙個字尾_suffix

var userflag user

func main()

接下來定義乙個user型別的變數,然後在main函式中呼叫flag.var方法,將變數位址傳入,接下來執行命令做測試。

go run fla**ar.go -user pingye

pingye_suffix

成功拼接上了字尾。

go語言元件學習示例開源庫,歡迎star

go語言 flag的使用

go語言flag的使用 package main import flag fmt var music file string flag.string file musicfile use file func main 例如檔案為flagtest.go go run flagtest.go file ...

Go語言flag包使用

flag包提供了一系列解析命令列引數的功能介面 命令列語法主要有以下幾種形式 flag 只支援bool型別 flag x flag x 只支援非bool型別以上語法對於乙個或兩個 號,效果是一樣的,但是要注意對於第三種情況,只支援非bool型別,原因是碰到如下情況時 cmd x 為0,false有可...

Go語言flag包使用

這個包的用途是接收命令列引數的。如果你玩過mysql,肯定對這個介面很熟悉 對的,就是幹這個用的,接收命令列引數 這一章所學的任何 都要編譯成.exe才能跑,禁止右擊 run!其實go的os模組,也帶有這個功能,但是這個功能有點欠缺。不能接收像 u root p 3306這樣指定key的值。只能接收...