Go語言GOPATH是什么


一、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 目錄。
編譯完成后,開發者就會將錯誤的工程版本發布到外網。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM