Bla*_*ard 13 flags go command-line-arguments
可以不在Go中的flag包中设置默认值吗?例如,在flag包中,您可以写出以下行:
filename := flag.String("file", "test.csv", "Filename to cope with")
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我不一定要设置默认值,test.csv在这种情况下,而是总是让用户指定自己的文件名,如果没有指定,那么我想导致错误并退出程序.
其中一个我想出的办法是,我第一次检查的价值filename做后flag.Parse(),如果该值是test.csv那么我有程序与适当的出错消息退出.但是,如果可以避免,我不想编写这样的冗余代码 - 即使它不能,我也想听听更好的方法来解决这个问题.
argparse顺便说一下,你可以在Python的模块中进行那些操作- 我只想实现类似的东西,如果我能......
另外,我可以在flag包中实现短参数和长参数(换句话说,两者-f和-file参数?)?
谢谢.
zzz*_*zzz 16
我认为以这样一种方式设计你的标志值是不恰当的,这种方式在等于各自类型的零值时暗示"不存在".例如:
optFile := flag.String("file", "", "Source file")
flag.Parse()
fn := *optFile
if fn == "" {
fn = "/dev/stdin"
}
f, err := os.Open(fn)
...
Run Code Online (Sandbox Code Playgroud)
广告第二个问题:IINM,标志包按设计不区分-flag和--flag.督察,你可以同时-f和--file你的标志设置和写入的任何版本-或--两者之前f和file.但是,考虑到另一个定义的标志-g,标志包将不会被识别-gf foo为等价的-g -f foo.
当我有一个不能有默认值的标志时,我经常使用值REQUIRED或类似的东西.我觉得这样--help更容易阅读.
至于为什么它没有被烘烤,我怀疑它只是被认为不够重要.默认值不适合所有需要.但是,--help旗帜是相似的; 它并不适合所有需要,但大部分时间它都足够好.
这并不是说所需的标志是个坏主意.如果你足够热情,一个flagutil包裹可能会很好.把当前的flagAPI,使Parse返回描述丢失标志错误并添加RequiredInt和RequiredIntVar等.如果事实证明是有用/流行可能与正式合并flag包.