是否可以不在 Go 中的标志包中设置默认值?例如,在 flag 包中,您可以写出以下行:filename := flag.String("file", "test.csv", "Filename to cope with")在上面的代码中,我不想一定设置默认值,test.csv在这种情况下,而是总是让用户指定他们自己的文件名,如果没有指定,那么我想导致错误并退出程序。我想出的方法之一是filename在执行之后首先检查 的值flag.Parse(),如果该值是,test.csv则程序退出并显示相应的错误消息。但是,如果可以避免的话,我不想编写这样的冗余代码 - 即使不能,我也想听听这里有什么更好的方法来处理这个问题。argparse顺便说一下,您可以在 Python 的模块中执行此类操作-如果可以,我只想实现类似的操作...另外,我可以实现短期和长期的争论(换句话说既-f和-file论证?)的标志包?谢谢。
2 回答
隔江千里
TA贡献1906条经验 获得超10个赞
我认为以这种方式设计标志值是惯用的,当等于它们各自类型的零值时意味着“不存在”。例如:
optFile := flag.String("file", "", "Source file")
flag.Parse()
fn := *optFile
if fn == "" {
fn = "/dev/stdin"
}
f, err := os.Open(fn)
...
广告第二个问题:IINM,设计的标志包不区分-flag和--flag。督察,你可以同时-f和--file你的标志设置和写入的任何版本-或--两者之前f和file。但是,考虑到另一个定义的 flag -g, flag 包不会识别-gf foo为等效于-g -f foo。
- 2 回答
- 0 关注
- 383 浏览
添加回答
举报
0/150
提交
取消