golang 獲取當(dāng)前執(zhí)行程序路徑的操作
我就廢話不多說(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),由于才入門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的類庫(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中RPC遠(yuǎn)程過(guò)程調(diào)用的實(shí)現(xiàn)
本文主要介紹了Go中RPC遠(yuǎn)程過(guò)程調(diào)用的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
Go語(yǔ)言利用time.After實(shí)現(xiàn)超時(shí)控制的方法詳解
最近在學(xué)習(xí)golang,所以下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言利用time.After實(shí)現(xiàn)超時(shí)控制的相關(guān)資料,文中通過(guò)示例介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08
Golang時(shí)間處理庫(kù)go-carbon?v2.2.13發(fā)布細(xì)則
這篇文章主要為大家介紹了Golang?時(shí)間處理庫(kù)go-carbon?v2.2.13發(fā)布細(xì)則,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
golang?run時(shí)報(bào)undefined錯(cuò)誤的解決
這篇文章主要介紹了golang?run時(shí)報(bào)undefined錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
Go1.18新特性工作區(qū)模糊測(cè)試及泛型的使用詳解
這篇文章主要為大家介紹了Go?1.18新特性中的工作區(qū)?模糊測(cè)試?泛型使用進(jìn)行詳細(xì)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
盤點(diǎn)幾種Go語(yǔ)言開(kāi)發(fā)的IDE
Go語(yǔ)言作為一種新興的編程語(yǔ)言,近年來(lái)受到了越來(lái)越多的關(guān)注,它以其簡(jiǎn)潔、高效和并發(fā)性能而聞名,被廣泛應(yīng)用于各種軟件開(kāi)發(fā)項(xiàng)目中,本文將介紹幾種常用的Go語(yǔ)言IDE,并對(duì)它們進(jìn)行比較,幫助開(kāi)發(fā)者根據(jù)自己的需求選擇合適的工具,需要的朋友可以參考下2023-11-11

