golang: How can I use pflag with other packages that use flag?

huangapple go评论90阅读模式
英文:

golang: How can I use pflag with other packages that use flag?

问题

如何在同时使用其他使用flag的包时使用pflag?

其中一些包在其init函数中为flag包定义标志,并要求调用flag.Parse()。

使用pflag包定义标志,需要调用pflag.Parse()。

当参数混合时,flag.Parse()和pflag.Parse()中的一个调用将失败。

如何在使用其他使用flag的包时使用pflag?

英文:

How does one use pflag while also using other packages that use flag?

Some of these packages define flags for the flag package (e.g. in their init functions) - and require flag.Parse() to be called.

Defining flags using the pflag package, require pflag.Parse() to be called.

One of the calls to flag.Parse() and pflag.Parse() will fail when arguments are mixed.

How does one use pflag with other packages that use flag?

答案1

得分: 4

我找到了两种方法。

  1. 第一种方法是使用 pflagsAddGoFlags()。例如:

     f := pflag.NewFlagSet("goFlags", pflag.ExitOnError)
     f.AddGoFlagSet(flag.CommandLine)
     f.Parse([]string{
        "--v=10", // 你想传递给其他程序的 Go 标志
     })
     flag.Parse()
    
  2. 另一种方法是获取另一个 pflag 的标志值。

     pflag.StringVar(&f, "f", "**", "***")
     pflag.Parse()
    

将该值设置为标志值。

    flag.Set("v", f)
    flag.Parse()

然后你就可以继续了。

英文:

I have found two approach for this.

  1. One with pflags AddGoFlags(). IE.

     f := pflag.NewFlagSet("goFlags", pflag.ExitOnError)
     f.AddGoFlagSet(flag.CommandLine)
     f.Parse([]string{
        "--v=10", // Your go flags that will be pass to other programs.
     })
     flag.Parse()
    
  2. Another approach you can use. This is not by the book but i have seen some used this..
    get the flag valu by another pflag.

     pflag.StringVar(&f, "f", "**", "***")
     pflag.Parse()
    

Set the value as flag value.

    flag.Set("v", f)
    flag.Parse()

and you are good to go..

答案2

得分: 0

我从 pflag 的维护者那里得到了一个回复。

解决方案是将所有在 flag 中定义的标志“导入”到 pflag 中,然后只调用 pflag.Parse()。

pflag 提供了一个方便的函数叫做 AddGoFlagSet() 来完成这个任务。

英文:

I got a response from a maintainer for pflag.

The solution is to "import" all flags defined for flag into pflag, and then make a call to pflag.Parse() alone.

pflag provides a convenience function called AddGoFlagSet() to accomplish this.

答案3

得分: -1

如何在使用 flag 的其他包中使用 pflag?

你不能这样做。只能选择其中一个。pflag 是 flag 的替代品,而不是附加组件。

英文:

> How does one use pflag with other packages that use flag?

You cannot. It is either or. plfag is a drop-in replacement for flag, not an addon.

huangapple
  • 本文由 发表于 2015年12月3日 05:59:14
  • 转载请务必保留本文链接:https://go.coder-hub.com/34053881.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定