是否可以覆盖标志值?

The*_*hat 2 go

我想知道是否有可能在运行时覆盖标志值。

例:

  • main.go导入软件包pkg.go。
  • pkg.go使用标志(“ -myFlag”),但是不会导出存储该标志的标识符。

是否可以更改pkg.go从main.go接收的“ -myFlag”标志值?

用例:我正在使用使用glog记录错误的库。glog使用标志定义在何处写入日志,默认情况下,它将日志写入文件。我使用的环境不允许写入文件系统,也不允许在应用程序初始化时设置标志,因此我需要以某种方式覆盖/设置glog标志,以便可以将其设置为将错误写入stderr。

Dav*_*e C 5

你可以做flag.Set("flagname", "whatever")

或者,如果您想对该选项做其他事情(检查默认值,看看它是否已被更改,等等),可以使用f := flag.Lookup("flagname")然后使用f.Value.Set("whatever")(以及其他方法)。

在任何一种情况下,flag.FlagSet如果您需要在flag.CommandLine集合之外的东西上使用匹配方法。

Playground example