GOPATH是Go語言中使用的一個環境變量,它使用絕對路徑提供專案的工作目錄(也稱為工作區), 是存放Golang專案程式碼的檔案路徑。 GOPATH目錄一般為:1、bin,存放編譯產生的二進位檔案;2、pkg,其中包括XX_amd64、mod和sumdb三個資料夾;3、src,存放golang專案程式碼的位置。
本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。
GOPATH 是Go 語言中使用的一個環境變量,它使用絕對路徑提供項目的工作目錄( 又稱工作區), 是存放Golang 專案程式碼的檔案路徑, GOPATH 適合處理大量Go語言原始碼、多個套件組合而成的複雜工程。
工作目錄是一個經過工程開發的相對參考目錄,好比當你要在公司寫一套伺服器程式碼,你的工位所包含的桌面、電腦及椅子就是你的工作區。
工作區的概念與工作目錄的概念也是類似的。如果不使用工作目錄的概念,當多人開發時,每個人都有一套自己的目錄結構,讀取設定檔的位置不統一,
GOPATH目錄一般為:
1、bin 存放編譯產生的二進位檔案。例如 執行指令 go get github.com/google/gops,bin目錄會產生 gops 的二進位。 2、pkg 其中pkg下面以下三個資料夾。XX_amd64: 其中 XX 是目標作業系統,例如 mac 系統對應的是darwin_amd64, linux 系統對應的是 linux_amd64,存放的是.a結尾的檔案。
3、src 存放- mod: 當開啟go Modules 模式下,go get指令快取下依賴套件存放的位置
- sumdb: go get指令快取下載的checksum資料存放的位元
golang專案程式碼的位置
# 如下是完整的Go專案的開發目錄:
my-go // my-go为GOPATH目录 -- bin -- myApp1 // 编译生成 -- myApp2 // 编译生成 -- myApp3 // 编译生成 -- pkg 依赖包编译后的*.a文件// -- src -- MyApp1 // 项目1 -- models -- controllers -- others -- main.go -- MyApp2 // 项目2 -- models -- controllers -- others -- main.go
需要將應用程式碼存放在固定的$GOPATH/ src目錄下
,且如果執行go get使用第三方類別庫的時候會自動下載並安裝到
$GOPATH目錄下。
專案的Golang程式碼,和第三方的Golang檔案混在一起, 每個如果專案都需要同樣的依賴,那麼我們就會在不同的GoPath的src中下載大量重複的第三方依賴包,這同樣會佔用大量的磁碟空間
GOPATH 的缺點
- #必須指定目錄,
- go get 指令的時候,無法指定取得的版本
- 引用第三方專案的時候,無法處理v1、v2、v3等不同版本的參考問題,因為在GOPATH 模式下專案路徑都是github.com/foo/project
- #無法同步一致第三方版本號,在執行Go 應用程式的時候,無法保證其它人與所期望依賴的第三方函式庫是相同的版本。
我們為不同的項目設定不同的GoPath,優點非常明顯:
方便管理項目,每個項目都是不同的GoPath,這對於我們管理多個Golang專案而言,能夠非常清晰的處理專案結構。如果我們把所有專案都放在同一個GoPath的src包下,那麼專案的結構就會變得非常混亂,難以管理。但是當我們需要依賴第三方的套件的時候,不同的項目設定不同的GoPath的缺點也非常明顯:
所以,設定一個GoPath目錄,解決依賴重複的問題,設定不同的GoPath目錄,解決Golang專案結構混亂的問題,這本身就是個有爭議性的問題。 #
為了解決這所有的問題,Golang最終引入了GoModule的概念。
以上是Go語言GOPATH是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!