Golang Go语言中 flag 包能否设置忽略未定义的 flag?
应用引用的一个包里面用了 flag 包定了参数,这个改不了,不能动。
我现在要在外面包一层,定义自己的命令行参数,现在遇到报错:
flag provided but not defined
引用的包里面没定义,我这外面新增的搞不了,官方的 flag 包能设置忽略未定义的 flag 吗?找了一圈好像不行,那不是无解了?
Golang Go语言中 flag 包能否设置忽略未定义的 flag?
自己 new 一个对象,别用全局 flag 呗。自己 new 的 flag 对象,第二个参数可以控制退出状态,全局的是有错就 os.Exit 退出了。你自己 new 的可以按你自己想法写逻辑。
更多关于Golang Go语言中 flag 包能否设置忽略未定义的 flag?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这样可以,我之前是自己增减 os.Args 内容匹配参数来解决的。
现在用 NewFlagSet ,我就可以先把自己要的 cmd 参数全解析出来,然后再把 os.Args 清空,只留下被引用包需要的 cmd 参数。
在Go语言中,flag
包是用于解析命令行参数的标准库。默认情况下,如果传入了未定义的命令行标志(flag),flag.Parse()
会将程序终止并输出错误信息,指出哪些标志是未知的。
然而,flag
包本身并没有直接提供一个选项来忽略未定义的标志。这种行为是为了确保程序的健壮性,避免因为误传参数而导致的潜在问题。
如果你确实需要忽略未定义的标志,你可以采取以下几种方法:
-
预处理命令行参数:在调用
flag.Parse()
之前,你可以手动过滤掉那些你不认识的标志。这通常涉及到对os.Args
的操作。 -
使用第三方库:有些第三方库提供了更灵活的命令行参数解析功能,包括忽略未定义标志的选项。例如,
cobra
和viper
是两个流行的Go语言命令行解析库,它们提供了丰富的功能来定制命令行参数的行为。 -
自定义错误处理:虽然
flag
包没有提供直接忽略未知标志的选项,但你可以通过捕获flag.Parse()
引发的错误来实现某种形式的忽略逻辑(尽管这通常不是推荐的做法,因为它可能会隐藏潜在的问题)。
总的来说,虽然 flag
包没有内置忽略未定义标志的功能,但通过一些额外的编程工作或使用第三方库,你仍然可以实现这一需求。在处理命令行参数时,确保程序的健壮性和用户友好性是非常重要的。