golang 獲取當(dāng)前執(zhí)行程序路徑的操作
我就廢話(huà)不多說(shuō)了,大家還是直接看代碼吧~
1.獲取當(dāng)前執(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])) //返回絕對(duì)路徑 filepath.Dir(os.Args[0])去除最后一個(gè)元素的路徑 if err != nil { log.Fatal(err) } return strings.Replace(dir, "\\", "/", -1) //將\替換成/ }
2.獲取當(dāng)前執(zhí)行程序目錄
func GetCurrentDirectory() string { //返回絕對(duì)路徑 filepath.Dir(os.Args[0])去除最后一個(gè)元素的路徑 dir, err := filepath.Abs(filepath.Dir(os.Args[0])) if err != nil { log.Fatal(err) } //將\替換成/ return strings.Replace(dir, "\\", "/", -1) }
測(cè)試使用
func main() { dir, err := filepath.Abs(filepath.Dir(os.Args[0])) if err != nil { log.Fatal(err) } fmt.Println(dir) }
補(bǔ)充:golang下的GOPATH路徑問(wèn)題
為了方便,我一般使用task來(lái)管理項(xiàng)目的編譯等事項(xiàng),由于才入門(mén)go,所以碰到一個(gè)問(wèn)題,以此篇為記。
背景
我需要開(kāi)發(fā)一個(gè)組建,所以代碼結(jié)構(gòu)沒(méi)有src目錄,并且項(xiàng)目放在GOPATH路徑的src目錄下
我在編譯二進(jìn)制文件的時(shí)候使用了下面的命令
GOPATH=`pwd` GOBIN=`pwd` go install main.go
編譯報(bào)錯(cuò),提示import的類(lèi)庫(kù)找不到
排錯(cuò)分析
1、檢查env是否正確 命令:go env,檢查結(jié)果正常
2、檢查golang的GOPATH和GOROOT配置是否正常,檢查通過(guò)
3、分析編譯命令找到問(wèn)題
問(wèn)題
我在編譯的時(shí)候重新定義了GOPATH路徑。在go語(yǔ)言編譯的時(shí)候,它會(huì)去找GOPATH和GOROOT下面的src目錄。
現(xiàn)在GOROOT=~/gopath/,那么首先編譯器到GOROOT下找import的包,如果沒(méi)有找到,則到GOPATH路徑下尋找
此時(shí)GOPATH=`pwd`,也就是項(xiàng)目路徑,那么它會(huì)到項(xiàng)目路徑下的src目錄下尋找。由于我沒(méi)有src目錄,所以找不到,從而編譯報(bào)錯(cuò)
解決
問(wèn)題其實(shí)出在GOPATH下,由于當(dāng)前項(xiàng)目文件已經(jīng)處于GOPATH的src下,所以只需要?jiǎng)h除GOPATH即可。
正確編譯命令:
GOBIN=`pwd` go install main.go
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
詳解Go語(yǔ)言如何判斷兩個(gè)對(duì)象是否相等
在編程中,判斷兩個(gè)對(duì)象是否相等是一項(xiàng)常見(jiàn)的任務(wù),同時(shí)判斷對(duì)象是否相等在很多情況下都非常重要,所以在接下來(lái)的內(nèi)容中,我們將詳細(xì)介紹在?Go?語(yǔ)言中如何判斷對(duì)象是否相等的方法和技巧,需要的可以參考一下2023-06-06Go語(yǔ)言的http/2服務(wù)器功能及客戶(hù)端使用
Golang 有一個(gè)很棒的自帶 http 服務(wù)器軟件包,不用說(shuō)就是: net/http, 它非常簡(jiǎn)單,但是功能非常強(qiáng)大。下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言的http/2服務(wù)器功能及客戶(hù)端使用的相關(guān)資料,需要的朋友可以參考下2018-09-09Go?函數(shù)中獲取調(diào)用者的函數(shù)名和文件名及行號(hào)
這篇文章主要介紹了Go?函數(shù)中獲取調(diào)用者的函數(shù)名和文件名及行號(hào),文章圍主題詳細(xì)內(nèi)容展開(kāi)相關(guān)介紹,感興趣的小伙伴可以參考一下2022-05-05一文帶你了解Go語(yǔ)言中函數(shù)設(shè)計(jì)的實(shí)踐示例
良好設(shè)計(jì)的函數(shù)具有清晰的職責(zé)和邏輯結(jié)構(gòu),提供準(zhǔn)確的命名和適當(dāng)?shù)膮?shù)控制,下面我們將一一描述函數(shù)設(shè)計(jì)時(shí)能夠遵循的最佳實(shí)踐,希望對(duì)大家有所幫助2023-06-06利用Golang實(shí)現(xiàn)對(duì)配置文件加密
在實(shí)際的應(yīng)用中,配置文件通常包含了一些敏感的信息,如數(shù)據(jù)庫(kù)密碼、API密鑰等,為了保護(hù)這些敏感信息不被惡意獲取,我們可以對(duì)配置文件進(jìn)行加密,本文將介紹如何使用Go語(yǔ)言實(shí)現(xiàn)對(duì)配置文件的加密,需要的朋友可以參考下2023-10-10golang?gorm學(xué)習(xí)之如何指定數(shù)據(jù)表
在sql中首先要指定是從哪張表中查詢(xún),所以這篇文章小編就來(lái)帶大家一起看一下gorm是如何根據(jù)model來(lái)自動(dòng)解析表名的,感興趣的小伙伴可以了解下2023-08-08