1. 程式人生 > 程式設計 >golang 獲取當前執行程式路徑的操作

golang 獲取當前執行程式路徑的操作

我就廢話不多說了,大家還是直接看程式碼吧~

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

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。