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

是否可以不在 Go 中的标志包中设置默认值?例如,在 flag 包中,您可以写出以下行:

filename := flag.String("file", "test.csv", "Filename to cope with")

在上面的代码中,我不想一定设置默认值,test.csv在这种情况下,而是总是让用户指定他们自己的文件名,如果没有指定,那么我想导致错误并退出程序。

我想出的方法之一是filename在执行之后首先检查 的值flag.Parse(),如果该值是,test.csv则程序退出并显示相应的错误消息。但是,如果可以避免的话,我不想编写这样的冗余代码 - 即使不能,我也想听听这里有什么更好的方法来处理这个问题。

argparse顺便说一下,您可以在 Python 的模块中执行此类操作-如果可以,我只想实现类似的操作...

另外,我可以实现短期和长期的争论(换句话说既-f-file论证?)的标志包?

谢谢。


慕姐8265434
浏览 392回答 2
2回答

隔江千里

我认为以这种方式设计标志值是惯用的,当等于它们各自类型的零值时意味着“不存在”。例如:optFile := flag.String("file", "", "Source file")flag.Parse()fn := *optFileif fn == "" {        fn = "/dev/stdin"}f, err := os.Open(fn)...广告第二个问题:IINM,设计的标志包不区分-flag和--flag。督察,你可以同时-f和--file你的标志设置和写入的任何版本-或--两者之前f和file。但是,考虑到另一个定义的 flag -g, flag 包不会识别-gf foo为等效于-g -f foo。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go