普通网友 2018-10-21 10:03
浏览 175
已采纳

有没有一种方法可以确定在使用`flag.VisitAll`时是否设置了标志?

I'm using go's native "flag" package.

Built into it is the ability to visit all currently defined flags, using flag.VisitAll.

I'm trying to build a snippet that tries to fetch the value for that flag from an environment variable if one exists and in-case the flag was not set, and I can't find a way to determine whether a specific flag was set or not.

Is there any way to achieve that without implementing new parameter types?

  • 写回答

2条回答 默认 最新

  • dtid30526 2018-10-21 13:51
    关注

    There is no function to walk over the unset command line flags. This functionality can be implemented, however, by taking the difference between the flags returned by VisitAll and Visit; the former walks over all flags, while the latter walks over set flags:

    func UnsetFlags(fs *flag.FlagSet) []*flag.Flag {
        var unset []*flag.Flag
        fs.VisitAll(func(f *flag.Flag) {
            unset = append(unset, f)
        })
        fs.Visit(func(f *flag.Flag) {
            for i, h := range unset {
                if f == h {
                    unset = append(unset[:i], unset[i+1:]...)
                }
            }
        })
        return unset
    }
    

    You can use that function after your flag.Parse call to set any unset flags to their environment value:

    for _, f := range UnsetFlags(flag.CommandLine) {
        v := os.Getenv(f.Name)
        f.Value.Set(v)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看