亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang 使用標志執行函數

Golang 使用標志執行函數

Go
搖曳的薔薇 2022-10-31 15:39:08
如何通過輸入一個標志來執行特定的功能,例如,我有三個標志:    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 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

如果要測試是否wordnumb作為 cli 參數提供,請參閱檢查 Go 中是否提供了標志。


查看完整回答
反對 回復 2022-10-31
?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

根據https://pkg.go.dev/flag#StringVar

StringVar 定義了一個帶有指定名稱、默認值和使用字符串的字符串標志。參數 p 指向一個字符串變量,其中存儲標志的值。

所以這意味著在你的情況下-"foo"將是默認值forwordPtr和for 。42numbPtrfalseforkPtr


查看完整回答
反對 回復 2022-10-31
  • 2 回答
  • 0 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號