golang 獲取當前執行程式路徑的操作
阿新 • • 發佈:2020-12-17
我就廢話不多說了,大家還是直接看程式碼吧~
1.獲取當前執行程式路徑
func execPath() (string,error) { file,err := exec.LookPath(os.Args[0]) if err != nil { return "",err } re,err := filepath.Abs(file) if err != nil { logs.Error("The eacePath failed: %s\n",err.Error()) } flog.Infoln("The path is ",re) return filepath.Abs(file) } func GetCurrentDirectory() string { dir,err := filepath.Abs(filepath.Dir(os.Args[0])) //返回絕對路徑 filepath.Dir(os.Args[0])去除最後一個元素的路徑 if err != nil { log.Fatal(err) } return strings.Replace(dir,"\\","/",-1) //將\替換成/ }
2.獲取當前執行程式目錄
func GetCurrentDirectory() string { //返回絕對路徑 filepath.Dir(os.Args[0])去除最後一個元素的路徑 dir,err := filepath.Abs(filepath.Dir(os.Args[0])) if err != nil { log.Fatal(err) } //將\替換成/ return strings.Replace(dir,-1) }
測試使用
func main() { dir,err := filepath.Abs(filepath.Dir(os.Args[0])) if err != nil { log.Fatal(err) } fmt.Println(dir) }
補充:golang下的GOPATH路徑問題
為了方便,我一般使用task來管理專案的編譯等事項,由於才入門go,所以碰到一個問題,以此篇為記。
背景
我需要開發一個組建,所以程式碼結構沒有src目錄,並且專案放在GOPATH路徑的src目錄下
我在編譯二進位制檔案的時候使用了下面的命令
GOPATH=`pwd` GOBIN=`pwd` go install main.go
編譯報錯,提示import的類庫找不到
排錯分析
1、檢查env是否正確 命令:go env,檢查結果正常
2、檢查golang的GOPATH和GOROOT配置是否正常,檢查通過
3、分析編譯命令找到問題
問題
我在編譯的時候重新定義了GOPATH路徑。在go語言編譯的時候,它會去找GOPATH和GOROOT下面的src目錄。
現在GOROOT=~/gopath/,那麼首先編譯器到GOROOT下找import的包,如果沒有找到,則到GOPATH路徑下尋找
此時GOPATH=`pwd`,也就是專案路徑,那麼它會到專案路徑下的src目錄下尋找。由於我沒有src目錄,所以找不到,從而編譯報錯
解決
問題其實出在GOPATH下,由於當前專案檔案已經處於GOPATH的src下,所以只需要刪除GOPATH即可。
正確編譯命令:
GOBIN=`pwd` go install main.go
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。