欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go mod 依賴管理的具體使用

 更新時(shí)間:2024年01月28日 09:55:31   作者:白如意i  
在Go語言開發(fā)中,依賴管理是一項(xiàng)非常重要的工作,Go mod作為官方的包管理工具已經(jīng)成為了Go語言依賴管理的首選方式,本文就來介紹一下go mod 依賴管理的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下

注:如果你的 GoLand 不會(huì)自動(dòng)拉取依賴,檢查一下 IDE 配置里面是不是沒有啟用 Go Modules。

go mod 介紹

Modules 官方定義為:

模塊是相關(guān) Go 包的集合。modules 是源代碼交換和版本控制的單元。go 命令直接支持使用 modules,包括記錄和解析對(duì)其他模塊的依賴性。
modules 替換舊的基于 GOPATH 的方法來指定在給定構(gòu)建中使用哪些源文件。

mod 相關(guān)環(huán)境變量

# Modules 開關(guān)
GO111MODULE="auto"
# Go 模塊代理(脫離VCS版本控制方式,直接通過鏡像站點(diǎn)來拉取)
GOPROXY="https://proxy.golang.org,direct" # 國內(nèi)無法訪問
# 保證拉取到的模塊版本數(shù)據(jù)未經(jīng)過篡改
GOSUMDB="sum.golang.org" # 國內(nèi)無法訪問
# 私有模塊配置(用于Go 模塊代理無法訪問到的地方,如私有庫)
GONOPROXY=""
GONOSUMDB=""
GOPRIVATE=""

如何使用 go mod

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

我們可以先設(shè)置一下 GO111MODULE 和 GOPROXY 環(huán)境變量,可以直接加到環(huán)境變量中:

  • GO111MODULE=on 開啟 go modules 功能
  • GOPROXY 設(shè)置 go 代理,下載依賴的時(shí)候可以更快地下載

go.mod 文件

啟用了 Go modules 的項(xiàng)目,初始化項(xiàng)目時(shí),會(huì)生成一個(gè) go.mod 文件。描述了當(dāng)前項(xiàng)目(也就是當(dāng)前模塊)的元信息

# module:用于定義當(dāng)前項(xiàng)目的模塊路徑。
module github.com/eddycjy/module-repo

# go:用于標(biāo)識(shí)當(dāng)前模塊的 Go 語言版本,值為初始化模塊時(shí)的版本,目前來看還只是個(gè)標(biāo)識(shí)作用。
go 1.13

# require:用于設(shè)置一個(gè)特定的模塊版本。
require (
    example.com/apple v0.1.2
    example.com/banana v1.2.3
    example.com/banana/v2 v2.3.4
    example.com/pear // indirect	# indirect 標(biāo)識(shí)表示該模塊為間接依賴
    example.com/strawberry // incompatible
)

# exclude:排除一個(gè)特定的模塊版本。
exclude example.com/banana v1.2.4

# replace:用于將一個(gè)模塊版本替換為另外一個(gè)模塊版本。
replace example.com/banana => example.com/fish

go mod 命令

  • go mod download:下載依賴包
  • go mod edit:編輯 go.mod
  • go mod graph:打印模塊依賴圖
  • go mod init:初始化新的 go module 在當(dāng)前目錄(嗯,是的,我們寫的代碼其實(shí)也等于是一個(gè) go module)
  • go mod tidy:拉取缺少的模塊,移除不用的模塊
  • go mod vendor:將依賴復(fù)制到 vendor 下
  • go mod verify:驗(yàn)證依賴是否正確
  • go mod why:解釋為什么需要依賴

go.mod 文件

module hello

go 1.18

go.mod 文件一旦創(chuàng)建后,它的內(nèi)容將會(huì)被 go toolchain 全面掌控。go toolchain 會(huì)在各類命令執(zhí)行時(shí),比如 go getgo build、go mod 等修改和維護(hù) go.mod 文件。

go.mod 提供了 module,require,replace 和 exclude 四個(gè)命令。

  • module:指定包的名字(路徑)
  • require:指定依賴項(xiàng)模塊
  • replace:替換依賴模塊(比如自己修改了一版,就可以使用 replace 將依賴替換為自己的實(shí)現(xiàn),但是代碼里面 import 路徑還是舊的路徑)
  • exclude:用于排除某個(gè)包的特定版本,與 replace 類似,僅在當(dāng)前 module 為 main module 時(shí)有效,其他項(xiàng)目引用當(dāng)前項(xiàng)目時(shí),exclude 指令會(huì)被忽略

go module 安裝依賴的原則是先拉取最新的 release tag,若無則拉最新的 commit。

go 會(huì)自動(dòng)生成一個(gè) go.sum 文件來記錄 dependency tree。

go get 升級(jí)

go get -u need-upgrade-package

升級(jí)后會(huì)將新的依賴版本更新到 go.mod,也可以使用 go get -u 升級(jí)所有依賴。

  • 運(yùn)行 go get -u 將會(huì)升級(jí)到最新的次要版本或者修訂版本(x.y.z 是修訂版本號(hào),y 是次要版本號(hào))
  • 運(yùn)行 go get -u=patch 將會(huì)升級(jí)到最新的修訂版本
  • 運(yùn)行 go get package@version 將會(huì)升級(jí)到指定的版本號(hào) version
  • 運(yùn)行 go get 如果有版本的更改,那么 go.mod 文件也會(huì)更改

go.sum

這個(gè)文件記錄了當(dāng)前拉取的實(shí)際的版本號(hào)??梢员WC我們每次拉取的都是相同的版本,除非我們手動(dòng)去更新。

不同模式的命令區(qū)別

1. gopath模式

在工程經(jīng)過go build、go install或 go get等指令后,會(huì)將拉取的第三方xxx依賴包放在GOPATH/src目錄下

2. go vendor模式

go build 時(shí)的應(yīng)用路徑搜索調(diào)整成為 優(yōu)先搜當(dāng)前工程路徑/vendor目錄

2. go module模式

  • 拉取依賴路徑
    Go Modules 模式下,下載的包是存在 $GOPATH/pkg/mod 目錄下的

  • 拉取指定版本
    GoModules 模式下,可以下載指定版本的包

go get {模塊名}@{最新版本: latest|分支: master|tag: v0.3.2|hash: 342b2e}

通常拉取到本地后,配合go mod tidygo mod vendor就能有效的加載到我們程序中使用的包,同時(shí)會(huì)更新掉go.mod配置文件。

到此這篇關(guān)于go mod 依賴管理的具體使用的文章就介紹到這了,更多相關(guān)go mod 依賴管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • GoLang中的加密方法小結(jié)

    GoLang中的加密方法小結(jié)

    這篇文章主要介紹了GoLang中的加密方法。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 詳解Go語言中關(guān)于包導(dǎo)入必學(xué)的 8 個(gè)知識(shí)點(diǎn)

    詳解Go語言中關(guān)于包導(dǎo)入必學(xué)的 8 個(gè)知識(shí)點(diǎn)

    這篇文章主要介紹了詳解Go語言中關(guān)于包導(dǎo)入必學(xué)的 8 個(gè)知識(shí)點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Go操作etcd的實(shí)現(xiàn)示例

    Go操作etcd的實(shí)現(xiàn)示例

    etcd是近幾年比較火熱的一個(gè)開源的、分布式的鍵值對(duì)數(shù)據(jù)存儲(chǔ)系統(tǒng),提供共享配置、服務(wù)的注冊(cè)和發(fā)現(xiàn),本文主要介紹etcd的安裝和使用,感興趣的可以了解一下
    2021-09-09
  • Golang中Model的具體使用

    Golang中Model的具體使用

    本文主要介紹了Golang中Model的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • golang 后臺(tái)進(jìn)程的啟動(dòng)和停止操作

    golang 后臺(tái)進(jìn)程的啟動(dòng)和停止操作

    這篇文章主要介紹了golang 后臺(tái)進(jìn)程的啟動(dòng)和停止操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Golang分布式應(yīng)用定時(shí)任務(wù)示例詳解

    Golang分布式應(yīng)用定時(shí)任務(wù)示例詳解

    這篇文章主要為大家介紹了Golang分布式應(yīng)用定時(shí)任務(wù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • go版tensorflow安裝教程詳解

    go版tensorflow安裝教程詳解

    這篇文章主要介紹了go版tensorflow安裝教程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 深入理解go slice結(jié)構(gòu)

    深入理解go slice結(jié)構(gòu)

    這篇文章主要介紹了go slice結(jié)構(gòu),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-09-09
  • 一文帶你掌握Golang的反射基礎(chǔ)

    一文帶你掌握Golang的反射基礎(chǔ)

    go的反射是由其標(biāo)準(zhǔn)庫中的reflect包實(shí)現(xiàn),該reflect包實(shí)現(xiàn)了在運(yùn)行時(shí)進(jìn)行反射的能力,本篇主要介紹了reflect的常用的幾個(gè)方法,希望對(duì)大家有所幫助
    2023-02-02
  • Go?mod?replace使用方法及常見問題分析

    Go?mod?replace使用方法及常見問題分析

    這篇文章主要為大家介紹了Go?mod?replace使用方法及常見問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08

最新評(píng)論