为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信