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

Go 中的标志包 - 我是否必须始终设置默认值?

Go 中的标志包 - 我是否必须始终设置默认值?

Go
慕姐8265434 2021-06-20 08:04:09
是否可以不在 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。


查看完整回答
反对 回复 2021-06-28
  • 2 回答
  • 0 关注
  • 383 浏览
慕课专栏
更多

添加回答

举报

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