一、GOPATH的概念
GOPATH 是 Go 語言中使用的一個環境變量,它使用絕對路徑提供項目的工作目錄(也稱為工作區)。
工作目錄是一個工程開發的相對參考目錄,好比當你要在公司編寫一套服務器代碼,你的工位所包含的桌面、計算機及椅子就是你的工作區。
工作區的概念與工作目錄的概念也是類似的。如果不使用工作目錄的概念,在多人開發時,每個人有一套自己的目錄結構,讀取配置文件的位置不統一,
輸出的二進制運行文件也不統一,這樣會導致開發的標准不統一,影響開發效率。
GOPATH 適合處理大量 Go語言源碼、多個包組合而成的復雜工程。
從 Go 1.8 版本開始,Go 開發包在安裝完成后,將 GOPATH 賦予了一個默認的目錄,參見下表
可以通過go env命令查看Go的環境變量,我使用的mac效果如下(安裝后,更改過)
二、GOPATH的使用
GOPATH
目錄一般為:
$HOME/go --bin # 存放編譯后的可執行文件 --pkg # 依賴包編譯后的*.a文件 --src # 存放源碼文件,以代碼包為組織形式
如下是一個完整的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后,工程中使用 import的根目錄是GOPATH中的src目錄
GOPATH為/Users/lxxxxxk/GolandProjects,工程為/Users/lxxxxxk/Desktop/my-go/src/MyApp1
那么MyApp1中使用import導入本地包的時候,這樣寫:
import "MyApp1/models" // models為包名
也就是說,GOPATH下必須要有src目錄,不然import導包的時候會找不到
import導包規則:
1、先去GOROOT/src/路徑下找 /usr/local/go/src/MyApp1 (系統環境變量 $GOROOT,即使用go env命令顯示的GOROOT)
2、如果1沒有,就去Project GOPATH/src/路徑下找 /Users/lxxxxxk/Desktop/my-go/src/MyApp1
3、如果2還沒找到,就去Global GOPATH路徑下找 /Users/lxxxxxk/GolandProjects(系統環境變量 $GOPATH,即使用go env命令顯示的GOPATH)
三、GoLand設置GOPATH
圖中的 Global GOPATH 代表全局 GOPATH,一般來源於系統環境變量中的 GOPATH;
Project GOPATH 代表項目所使用的 GOPATH,該設置會被保存在工作目錄的 .idea目錄下,不會被設置到環境變量的 GOPATH 中,但會在編譯時使用到這個目錄。
建議在開發時填寫項目 GOPATH,每一個項目盡量只設置一個 GOPATH,不使用多個 GOPATH 和全局的 GOPATH。
否則可能會出現如下麻煩:
將某項目代碼保存在 /home/davy/projectA 目錄下,將該目錄設置為 GOPATH。
隨着開發進行,需要再次獲取一份工程項目的源碼,此時源碼保存在 /home/davy/projectB 目錄下,
如果此時需要編譯 projectB 目錄的項目,但開發者忘記設置 GOPATH 而直接使用命令行編譯,
則當前的 GOPATH 指向的是 /home/davy/projectA 目錄,而不是開發者編譯時期望的 projectB 目錄。
編譯完成后,開發者就會將錯誤的工程版本發布到外網。