• 35648

    文章

  • 23

    评论

  • 20

    友链

  • 最近新加了很多技术文章,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

golang flag redefined错误

欢迎来到阿八个人博客网站。本 阿八个人博客 网站提供最新的站长新闻,各种互联网资讯。 喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术! URL链接:https://www.abboke.com/jsh/2019/0813/105594.html 1190000020045899

因为之前命令行参数是同过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的方法调用。完美解决问题。

相关文章

暂住......别动,不想说点什么吗?
  • 全部评论(0
    还没有评论,快来抢沙发吧!