golang flag redefined错误

不许动我是神经病 · · 80 次点击 · · 开始浏览    

因为之前命令行参数是同过os.Args[1]来获取,感觉不太科学也不美观,所以今天改用flag去获取。

原始代码如下:

func GetRuntimePath() string {
    var spath string
    flag.StringVar(&spath, "p", " ", "这里请务必传入项目根目录")
    flag.Parse()
    return spath
}

结果go run 时报错,flag redefined: p。
框架使用的iris mvc框架,在router中调用了一次,另外在xorm engine的实例化方法里面获取config文件时也调用了一次。也就是说,在程序中多次调用了GetRuntimePath方法

flag是不能多次调用的,所以,这里加多一个缓存。

var Staticpath string

func GetRuntimePath() string {
    if Staticpath != "" {
        return Staticpath
    }
    var spath string
    flag.StringVar(&spath, "p", " ", "这里请务必传入项目根目录")
    flag.Parse()
    Staticpath = spath
    return Staticpath
}

因为这个命令行获取的参数获取到之后就不会再发生变动,所以我们使用包全局变量保存起来,第一次访问的时候从命令行获取,再次访问直接就拿全局变量的值即可,这样也不会再次出发flag的方法调用。完美解决问题。

本文来自:Segmentfault

感谢作者:不许动我是神经病

查看原文:golang flag redefined错误

入群交流(和以上内容无关):Go中文网 QQ 交流群:798786647 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

80 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传