搜尋
首頁後端開發Golang詳解 golang 依賴管理之 mod

詳解 golang 依賴管理之 mod

Apr 08, 2021 pm 04:03 PM
golang

下面由golang教學專欄跟大家介紹golang 依賴管理之 mod ,希望對需要的朋友有幫助!

詳解 golang 依賴管理之 mod

golang 依賴管理之mod

#go 很早就考慮了依賴管理的問題,內建go get 指令,可以直接獲取對應的依賴,非常方便,但是有一個巨大的缺陷,沒有版本的維護和管理,而版本不一致可能會導致各種兼容性問題,因此出現了很多第三方依賴管理工具, depglide 就是其中的佼佼者,到了go 1.11 官方終於推出了自己的依賴管理工具mod,並內建在go 版本中,go mod 使用簡單,功能強大,並且能自動兼容大多數之前的第三方工具,大量優秀的開源庫都已經切換到了go mod,大有一統江湖之勢

GO111MODULE

一個最大的變化是golang 的專案終於不再依賴$GOPATH 目錄了,之前的專案由於import 機制問題,所有專案都位於$GOPATH/src 目錄下,雖然也沒有太大的問題,但總是讓人感覺很怪,go 1.11 終於調整了這個問題,將程式碼從$GOPATH 中遷出了,為了相容之前研發模式,也仍然支援放到$GOPATH 下,透過GO111MODULE 環境變數控制

  • GO111MODULE=off : 關閉mod,查找vendor 目錄和$GOPATH 路徑下的依賴
  • GO111MODULE=on: 開啟mod, 僅根據go.mod 下載和尋找依賴
  • GO111MODULE=auto: 預設值,在非$GOPATH 路徑並且包含go. mod 的專案中才開啟mod

主要指令

go mod init     # 在新的 go 项目中执行,自动分析依赖,创建 go.sum
go mod tidy     # 自动分析依赖,并自动添加和删除依赖
go mod vendor   # 创建 vendor 目录,将依赖拷贝到当前的 vendor 文件夹下
go mod download # 手动下载依赖
  1. 對於一個新的go 項目,只需要新建專案的時候執行一下go mod init
  2. 之後每次庫更新,只需要先在程式碼中import 對應庫,然後執行go mod tidy 即可(也可用go mod download 手動下載)

庫版本更換

手動修改go.mod 檔案中的require 字段,重新執行go mod tidy 即可

require (
    github.com/gin-gonic/gin v1.4.0
)

golang 的版本使用以v 開頭的三位版本號,其中第一位表示有重大本本的更新,當發布一個v2 版本的函式庫時,module my-module 應該改為module my-module/v2,否則引入該函式庫需要在增加 incompatible 字尾

require (
    github.com/lestrrat-go/file-rotatelogs v2.2.0+incompatible
)

解決GFW 問題

因為一些原因,國內的網路存取不到golang.org 上的函式庫,好在大部分函式庫在github 上都有鏡像,可以用replace指令設定鏡像,以下是我碰到的一些函式庫

replace (
    cloud.google.com/go => github.com/googleapis/google-cloud-go v0.0.0-20190603211518-c8433c9aaceb
    go.etcd.io/bbolt => github.com/etcd-io/bbolt v1.3.4-0.20191001164932-6e135e5d7e3d
    go.uber.org/atomic => github.com/uber-go/atomic v1.4.1-0.20190731194737-ef0d20d85b01
    go.uber.org/multierr => github.com/uber-go/multierr v1.2.0
    go.uber.org/zap => github.com/uber-go/zap v1.10.1-0.20190926184545-d8445f34b4ae
    golang.org/x/crypto => github.com/golang/crypto v0.0.0-20190605123033-f99c8df09eb5
    golang.org/x/exp => github.com/golang/exp v0.0.0-20190510132918-efd6b22b2522
    golang.org/x/image => github.com/golang/image v0.0.0-20190523035834-f03afa92d3ff
    golang.org/x/lint => github.com/golang/lint v0.0.0-20190409202823-959b441ac422
    golang.org/x/mobile => github.com/golang/mobile v0.0.0-20190607214518-6fa95d984e88
    golang.org/x/net => github.com/golang/net v0.0.0-20190606173856-1492cefac77f
    golang.org/x/oauth2 => github.com/golang/oauth2 v0.0.0-20190604053449-0f29369cfe45
    golang.org/x/sync => github.com/golang/sync v0.0.0-20190423024810-112230192c58
    golang.org/x/sys => github.com/golang/sys v0.0.0-20190602015325-4c4f7f33c9ed
    golang.org/x/text => github.com/golang/text v0.3.2
    golang.org/x/time => github.com/golang/time v0.0.0-20190308202827-9d24e82272b4
    golang.org/x/tools => github.com/golang/tools v0.0.0-20190608022120-eacb66d2a7c3
    google.golang.org/api => github.com/googleapis/google-api-go-client v0.6.0
    google.golang.org/appengine => github.com/golang/appengine v1.6.1
    google.golang.org/genproto => github.com/google/go-genproto v0.0.0-20190605220351-eb0b1bdb6ae6
    google.golang.org/grpc => github.com/grpc/grpc-go v1.21.1
)

GO 1.12 之後支援了一個新的環境變數GOPROXY,用來設定依賴的代理位址,有兩個共用的位址:社群的goproxy.io 和又拍雲的goproxy.cn,親測好用

export GO111MODULE=on
export GOPROXY=https://goproxy.io

快取

go mod 更新依賴後會在本地緩存,快取路徑$GOPATH/pkg/mod

IDE 支援

#goland

啟用mod 設定

【Goland】→【Preference 】→【Go Module (vgo)】→ 【Enable Go Modules (vgo)】→ 【OK】

啟用mod 之後,goland 會自動檢查依賴,並自動更新go.sum,從而引入依賴庫,一般情況下都是好使的,偶爾不好使,手動執行下go mod tidy 即可

vscode

vscode 好像不會自動更新,手動執行go mod tidy 之後重新啟動才能生效

連結

  • 官網: https://blog.golang.org/using-go-modules
  • #Go Modules: https://blog.csdn.net/ytd7777/article/details/86898187
  • goproxy.io: https://goproxy.io/
#轉載請註明出處
本文連結:https://tech.hatlonely.com/article/56
#

以上是詳解 golang 依賴管理之 mod的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:segmentfault。如有侵權,請聯絡admin@php.cn刪除
使用GO開發時的安全考慮使用GO開發時的安全考慮Apr 27, 2025 am 12:18 AM

Gooffersrobustfeaturesforsecurecoding,butdevelopersmustimplementsecuritybestpracticeseffectively.1)UseGo'scryptopackageforsecuredatahandling.2)Manageconcurrencywithsynchronizationprimitivestopreventraceconditions.3)SanitizeexternalinputstoavoidSQLinj

了解GO的錯誤接口了解GO的錯誤接口Apr 27, 2025 am 12:16 AM

Go的錯誤接口定義為typeerrorinterface{Error()string},允許任何實現Error()方法的類型被視為錯誤。使用步驟如下:1.基本檢查和記錄錯誤,例如iferr!=nil{log.Printf("Anerroroccurred:%v",err)return}。 2.創建自定義錯誤類型以提供更多信息,如typeMyErrorstruct{MsgstringDetailstring}。 3.使用錯誤包裝(自Go1.13起)來添加上下文而不丟失原始錯誤信息,

並發程序中的錯誤處理並發程序中的錯誤處理Apr 27, 2025 am 12:13 AM

對效率的Handleerrorsinconcurrentgopragrs,UsechannelstocommunicateErrors,enplionErrorWatchers,Instertimeout,UsebufferedChannels和Provideclearrormessages.1)USEchannelelStopassErtopassErrorsErtopassErrorsErrorsErrorsFromGoroutInestOthemainFunction.2)

您如何在GO中實現接口?您如何在GO中實現接口?Apr 27, 2025 am 12:09 AM

在Go語言中,接口的實現是通過隱式的方式進行的。 1)隱式實現:類型只要包含接口定義的所有方法,就自動滿足該接口。 2)空接口:interface{}類型所有類型都實現,適度使用可避免類型安全問題。 3)接口隔離:設計小而專注的接口,提高代碼的可維護性和重用性。 4)測試:接口有助於通過模擬依賴進行單元測試。 5)錯誤處理:通過接口可以統一處理錯誤。

將GO接口與其他語言的接口進行比較(例如Java,C#)將GO接口與其他語言的接口進行比較(例如Java,C#)Apr 27, 2025 am 12:06 AM

go'sinterfacesareimpliclyimplyed,與Javaandc#wheRequireexplitiCimplation.1)Ingo,AnyTypeWithTheRequiredMethodSautSautSautautapitymethodimimplementsaninternionsaninterninternionsaninterface.2)

初始功能和副作用:平衡初始化與可維護性初始功能和副作用:平衡初始化與可維護性Apr 26, 2025 am 12:23 AM

Toensureinitfunctionsareeffectiveandmaintainable:1)Minimizesideeffectsbyreturningvaluesinsteadofmodifyingglobalstate,2)Ensureidempotencytohandlemultiplecallssafely,and3)Breakdowncomplexinitializationintosmaller,focusedfunctionstoenhancemodularityandm

開始GO:初學者指南開始GO:初學者指南Apr 26, 2025 am 12:21 AM

goisidealforbeginnersandsubableforforcloudnetworkservicesduetoitssimplicity,效率和concurrencyFeatures.1)installgromtheofficialwebsitealwebsiteandverifywith'.2)

進行並發模式:開發人員的最佳實踐進行並發模式:開發人員的最佳實踐Apr 26, 2025 am 12:20 AM

開發者應遵循以下最佳實踐:1.謹慎管理goroutines以防止資源洩漏;2.使用通道進行同步,但避免過度使用;3.在並發程序中顯式處理錯誤;4.了解GOMAXPROCS以優化性能。這些實踐對於高效和穩健的軟件開發至關重要,因為它們確保了資源的有效管理、同步的正確實現、錯誤的適當處理以及性能的優化,從而提升軟件的效率和可維護性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具