如何将布尔参数传递给Go标志

22

我有一个简单的布尔标志,我希望能将参数传递给它:

import (
    "flag"
    ...
 )

var debugMode = flag.Bool("debug", false, "run in debug mode")
flag.Parse()
if *debugMode == true {
    //print something
}
这段代码可以编译和运行,但变量始终为真。我使用以下调用:

这段代码可以编译和运行,但变量始终为真。我使用以下调用:

my_application -debug false

而且它从来不是假的。我错在哪里了?

1个回答

55

我花了一个小时来完成这个任务。结果发现指定布尔值参数的格式是:

Translated text:

我花了一个小时来完成这个任务。结果发现指定布尔值参数的格式是:

my_application -debug=false -another_boolean_param=boolean_value

并非问题所述。这很棘手:非布尔参数不需要“=”字符。


4
通常你会设置-debug,它会变成true,如果不设置,则标志将为false。如果默认值为false,则-debug=false是不必要的。 - fabrizioM
4
@IsmailBadawi说:这在文档中有提到(而你知道关于事后诸葛亮的那句话),但并没有很好地解释。这种行为是不一致的,因此令人困惑。为什么布尔值应该与字符串不同呢? - FuzzyAmi
2
@fabrizioM - 我怀疑你在这里错过了重点:它不是关于调试本身的;它是关于布尔标志总体而言的 :] - FuzzyAmi
2
正如@fabrizioM所说,布尔标志是一种特殊情况,因为没有参数的标志存在意味着该标志为真。例如,在此类标志后指定文件名并将其用作标志值会与标志的意图产生冲突,这更像是一个开/关开关。这就是为什么当未出现时,它的默认值应为false的原因。 - SirDarius
2
@SirDarius(和IsmailBadawi)- 我明白你的观点,但我仍然认为这是不必要的不一致,并违反了最小惊讶原则。不过,感谢你澄清了这一点。 - FuzzyAmi
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接