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的方法調用。完美解決問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章