golang flag redefined错误

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

    原文作者:不许动我是神经病
    原文地址: https://segmentfault.com/a/1190000020045899
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞