如何通過輸入一個標志來執行特定的功能,例如,我有三個標志: wordPtr numbPtr forkPtr并且在執行單個時,調用的函數被執行:.\data -wordPtr Test執行該標志時,僅執行 word 函數:package mainimport ( "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 -forkword: foonumb: 42 fork: true PS C:\golang> 你知道為什么嗎?
2 回答

慕標5832272
TA貢獻1966條經驗 獲得超4個贊
word
您為和標志提供默認值numb
,這意味著如果您不將它們作為 cli 參數提供,它們將獲得默認值。
在flag.Parse()
你只測試 if wordPtr
is not empty 或numbPtr
is 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 中是否提供了標志。

寶慕林4294392
TA貢獻2021條經驗 獲得超8個贊
根據https://pkg.go.dev/flag#StringVar
StringVar 定義了一個帶有指定名稱、默認值和使用字符串的字符串標志。參數 p 指向一個字符串變量,其中存儲標志的值。
所以這意味著在你的情況下-"foo"
將是默認值forwordPtr
和for 。42
numbPtr
false
forkPtr
- 2 回答
- 0 關注
- 143 瀏覽
添加回答
舉報
0/150
提交
取消