golang 獲取當前執(zhí)行程序路徑的操作
我就廢話不多說了,大家還是直接看代碼吧~
1.獲取當前執(zhí)行程序路徑
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.獲取當前執(zhí)行程序目錄
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,所以碰到一個問題,以此篇為記。
背景
我需要開發(fā)一個組建,所以代碼結(jié)構(gòu)沒有src目錄,并且項目放在GOPATH路徑的src目錄下
我在編譯二進制文件的時候使用了下面的命令
GOPATH=`pwd` GOBIN=`pwd` go install main.go
編譯報錯,提示import的類庫找不到
排錯分析
1、檢查env是否正確 命令:go env,檢查結(jié)果正常
2、檢查golang的GOPATH和GOROOT配置是否正常,檢查通過
3、分析編譯命令找到問題
問題
我在編譯的時候重新定義了GOPATH路徑。在go語言編譯的時候,它會去找GOPATH和GOROOT下面的src目錄。
現(xiàn)在GOROOT=~/gopath/,那么首先編譯器到GOROOT下找import的包,如果沒有找到,則到GOPATH路徑下尋找
此時GOPATH=`pwd`,也就是項目路徑,那么它會到項目路徑下的src目錄下尋找。由于我沒有src目錄,所以找不到,從而編譯報錯
解決
問題其實出在GOPATH下,由于當前項目文件已經(jīng)處于GOPATH的src下,所以只需要刪除GOPATH即可。
正確編譯命令:
GOBIN=`pwd` go install main.go
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Go?函數(shù)中獲取調(diào)用者的函數(shù)名和文件名及行號
這篇文章主要介紹了Go?函數(shù)中獲取調(diào)用者的函數(shù)名和文件名及行號,文章圍主題詳細內(nèi)容展開相關(guān)介紹,感興趣的小伙伴可以參考一下2022-05-05一文帶你了解Go語言中函數(shù)設(shè)計的實踐示例
良好設(shè)計的函數(shù)具有清晰的職責和邏輯結(jié)構(gòu),提供準確的命名和適當?shù)膮?shù)控制,下面我們將一一描述函數(shù)設(shè)計時能夠遵循的最佳實踐,希望對大家有所幫助2023-06-06golang?gorm學習之如何指定數(shù)據(jù)表
在sql中首先要指定是從哪張表中查詢,所以這篇文章小編就來帶大家一起看一下gorm是如何根據(jù)model來自動解析表名的,感興趣的小伙伴可以了解下2023-08-08