如何通過輸入一個標志來執行特定的功能,例如,我有三個標志:
wordPtr
numbPtr
forkPtr
并且在執行單個時,呼叫的函式被執行:
.\data -wordPtr Test
執行該標志時,僅執行 word 函式:
package main
import (
"flag"
"fmt"
)
var (
wordPtr string
numbPtr int
forkPtr bool
)
func main() {
flag.StringVar(&wordPtr, "word", "foo", "a string")
flag.IntVar(&numbPtr, "numb", 42, "an int")
flag.BoolVar(&forkPtr, "fork", false, "a bool")
flag.Parse()
if wordPtr != `` {
word(wordPtr)
}
if numbPtr != 0 {
numb(numbPtr)
}
if forkPtr {
fork(forkPtr)
}
}
func word(word string) {
fmt.Println("word:", word)
}
func numb(numb int) {
fmt.Println("numb:", numb)
}
func fork(fork bool) {
fmt.Println("fork:", fork)
}
但是,當我執行最后一個標志時,所有功能都被執行
PS C:\golang> .\logdata.exe -fork
word: foo
numb: 42
fork: true
PS C:\golang>
你知道為什么嗎?
uj5u.com熱心網友回復:
word您為和標志提供默認值numb,這意味著如果您不將它們作為 cli 引數提供,它們將獲得默認值。
在flag.Parse()你只測驗 if wordPtris not empty 或numbPtris not0之后,由于默認值不是這些,測驗將通過并且函式將被執行。
如果您使用空字串并0作為默認值:
flag.StringVar(&wordPtr, "word", "", "a string")
flag.IntVar(&numbPtr, "numb", 0, "an int")
然后,如果您不提供這些作為 cli 引數,您的測驗將不會通過:
.\logdata.exe -fork
將輸出:
fork: true
如果要測驗是否word或numb作為 cli 引數提供,請參閱檢查 Go 中是否提供了標志。
uj5u.com熱心網友回復:
根據https://pkg.go.dev/flag#StringVar
StringVar 定義了一個帶有指定名稱、默認值和使用字串的字串標志。引數 p 指向一個字串變數,其中存盤標志的值。
所以這意味著在你的情況下-"foo"將是默認值forwordPtr和for 。42numbPtrfalseforkPtr
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/421361.html
標籤:
