首頁  >  文章  >  後端開發  >  Go語言GOPATH是什麼

Go語言GOPATH是什麼

青灯夜游
青灯夜游原創
2023-01-11 17:51:271995瀏覽

GOPATH是Go語言中使用的一個環境變量,它使用絕對路徑提供專案的工作目錄(也稱為工作區), 是存放Golang專案程式碼的檔案路徑。 GOPATH目錄一般為:1、bin,存放編譯產生的二進位檔案;2、pkg,其中包括XX_amd64、mod和sumdb三個資料夾;3、src,存放golang專案程式碼的位置。

Go語言GOPATH是什麼

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

一、GOPATH的概念

       GOPATH 是Go 語言中使用的一個環境變量,它使用絕對路徑提供項目的工作目錄( 又稱工作區), 是存放Golang 專案程式碼的檔案路徑, GOPATH 適合處理大量Go語言原始碼、多個套件組合而成的複雜工程。

        工作目錄是一個經過工程開發的相對參考目錄,好比當你要在公司寫一套伺服器程式碼,你的工位所包含的桌面、電腦及椅子就是你的工作區。

        工作區的概念與工作目錄的概念也是類似的。如果不使用工作目錄的概念,當多人開發時,每個人都有一套自己的目錄結構,讀取設定檔的位置不統一,

##二、GOPATH的使用 

GOPATH目錄一般為:

1、bin 存放編譯產生的二進位檔案。例如 執行指令 go get github.com/google/gops,bin目錄會產生 gops 的二進位。

2、pkg 其中pkg下面以下三個資料夾。

     XX_amd64: 其中 XX 是目標作業系統,例如 mac 系統對應的是darwin_amd64, linux 系統對應的是 linux_amd64,存放的是.a結尾的檔案。
  •  mod: 當開啟go Modules 模式下,go get指令快取下依賴套件存放的位置
  •  sumdb: go get指令快取下載的checksum資料存放的位元
3、src 存放

golang專案程式碼的位置

Go語言GOPATH是什麼

# 如下是完整的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 模式下,我們

需要將應用程式碼存放在固定的$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的缺點也非常明顯:

  • 第三方依賴的套件和我們自己的Golang套件混在一起,會為我們的專案文件管理帶來一定的麻煩。

  • 不同的GoPath都需要下載依賴,那麼磁碟中重複的依賴就會非常多,會佔用我們大量的磁碟空間。

所以,設定一個GoPath目錄,解決依賴重複的問題,設定不同的GoPath目錄,解決Golang專案結構混亂的問題,這本身就是個有爭議性的問題。 #

為了解決這所有的問題,Golang最終引入了GoModule的概念。

Go語言GOPATH是什麼

【相關推薦:Go影片教學程式設計教學

以上是Go語言GOPATH是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn