如何通过输入一个标志来执行特定的功能,例如,我有三个标志: 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 关注
- 93 浏览
添加回答
举报
0/150
提交
取消