是否可以覆盖标志值?

时间:2015-03-21 19:00:53

标签: go

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

示例:

  • main.go导入包pkg.go.
  • pkg.go使用标志(" -myFlag")但不会导出存储该标志的标识符。

是否可以更改" -myFlag"的标志值?哪个pkg.go从main.go收到?

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

1 个答案:

答案 0 :(得分:4)

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

或者,如果您想对该选项执行其他操作(请检查默认设置,查看它是否已更改等),您可以使用f := flag.Lookup("flagname")然后使用f.Value.Set("whatever")(以及作为其他方法)。

在任何一种情况下,如果您需要flag.FlagSet设置以外的其他方法,则会有匹配的flag.CommandLine方法。

Playground example