目錄
一、GOPATH的概念
首頁 後端開發 Golang Go語言GOPATH是什麼

Go語言GOPATH是什麼

Jan 11, 2023 pm 05:51 PM
golang go語言

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Go的爬蟲Colly中Queue線程的問題是什麼? Go的爬蟲Colly中Queue線程的問題是什麼? Apr 02, 2025 pm 02:09 PM

Go爬蟲Colly中的Queue線程問題探討在使用Go語言的Colly爬蟲庫時,開發者常常會遇到關於線程和請求隊列的問題。 �...

Go語言中用於浮點數運算的庫有哪些? Go語言中用於浮點數運算的庫有哪些? Apr 02, 2025 pm 02:06 PM

Go語言中用於浮點數運算的庫介紹在Go語言(也稱為Golang)中,進行浮點數的加減乘除運算時,如何確保精度是�...

在 Go 語言中,為什麼使用 Println 和 string() 函數打印字符串會出現不同的效果? 在 Go 語言中,為什麼使用 Println 和 string() 函數打印字符串會出現不同的效果? Apr 02, 2025 pm 02:03 PM

Go語言中字符串打印的區別:使用Println與string()函數的效果差異在Go...

在Go語言中使用Redis Stream實現消息隊列時,如何解決user_id類型轉換問題? 在Go語言中使用Redis Stream實現消息隊列時,如何解決user_id類型轉換問題? Apr 02, 2025 pm 04:54 PM

Go語言中使用RedisStream實現消息隊列時類型轉換問題在使用Go語言與Redis...

GoLand中自定義結構體標籤不顯示怎麼辦? GoLand中自定義結構體標籤不顯示怎麼辦? Apr 02, 2025 pm 05:09 PM

GoLand中自定義結構體標籤不顯示怎麼辦?在使用GoLand進行Go語言開發時,很多開發者會遇到自定義結構體標籤在�...

Go語言中哪些庫是由大公司開發或知名的開源項目提供的? Go語言中哪些庫是由大公司開發或知名的開源項目提供的? Apr 02, 2025 pm 04:12 PM

Go語言中哪些庫是大公司開發或知名開源項目?在使用Go語言進行編程時,開發者常常會遇到一些常見的需求,�...

Go語言中`var`和`type`關鍵字定義結構體的區別是什麼? Go語言中`var`和`type`關鍵字定義結構體的區別是什麼? Apr 02, 2025 pm 12:57 PM

Go語言中結構體定義的兩種方式:var與type關鍵字的差異Go語言在定義結構體時,經常會看到兩種不同的寫法:一�...

多進程日誌寫入如何保證並發安全又高效? 多進程日誌寫入如何保證並發安全又高效? Apr 02, 2025 pm 03:51 PM

高效處理多進程日誌寫入的並發安全問題多進程同時寫入同一個日誌文件,如何保證並發安全且高效?這是一個...

See all articles