【问题标题】:Is it possible to overwrite flag values?是否可以覆盖标志值?
【发布时间】:2015-03-24 02:55:54
【问题描述】:

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

例子:

  • main.go 导入包 pkg.go。
  • pkg.go 使用一个标志(“-myFlag”),但存储标志的标识符没有被导出。

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

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

【问题讨论】:

    标签: go


    【解决方案1】:

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

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

    在任何一种情况下,如果您在 flag.CommandLine 集以外的其他东西上需要此方法,都有匹配的 flag.FlagSet 方法。

    Playground example

    【讨论】:

    • 另外,对于由其他包定义的标志,我喜欢通常使用flag.Set("flagName", value) 的约定,特别是对于glog,您可能希望使用flag.Set("alsologtostderr", "true")
    • @user114241很好地指出了更简单的功能。哦!我对文档的参考/链接很刻薄,但后来没有选择最简单的文档选项!自我提醒:在回答问题之前必须更全面地重新阅读完整文档!
    猜你喜欢
    • 2014-07-13
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 2017-05-28
    • 1970-01-01
    相关资源
    最近更新 更多