gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:06:21 25 4
gpt4 key购买 nike

Go 中的 flag 包可以不设置默认值吗?例如,在 flag 包中可以写出以下行:

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

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

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

顺便说一句,您可以在 Python 的 argparse 模块中执行这些操作 - 如果可以的话,我只想实现类似的事情......

另外,我可以在标志包中同时实现短参数和长参数(换句话说,-f-file 参数?)?

谢谢。

最佳答案

我认为以这样一种方式设计您的标志值是惯用的,当等于它们各自类型的零值时,这意味着“不存在”。例如:

optFile := flag.String("file", "", "Source file")
flag.Parse()
fn := *optFile
if fn == "" {
fn = "/dev/stdin"
}
f, err := os.Open(fn)
...

第二个问题:IINM,标志包by design不区分-flag--flag。 IOW,您可以在标志集中同时设置 -f--file 并编写任何版本的 ---ffile 之前。但是,考虑到另一个定义的标志 -g,标志包将-gf foo 识别为等同于 -g -f foo.

关于go - Go 中的标志包 - 我是否必须始终设置默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18429632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com