中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解Golang中的go mod

發布時間:2021-11-22 17:37:44 來源:億速云 閱讀:193 作者:柒染 欄目:大數據

本篇文章給大家分享的是有關如何理解Golang中的go mod,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

什么是go.mod

Go.mod是Golang1.11版本新引入的官方包管理工具用于解決之前沒有地方記錄依賴包具體版本的問題,方便依賴包的管理。

Go.mod其實就是一個Modules,關于Modules的官方定義為:

Modules是相關Go包的集合,是源代碼交換和版本控制的單元。go命令直接支持使用Modules,包括記錄和解析對其他模塊的依賴性。Modules替換舊的基于GOPATH的方法,來指定使用哪些源文件。

Modules和傳統的GOPATH不同,不需要包含例如src,bin這樣的子目錄,一個源代碼目錄甚至是空目錄都可以作為Modules,只要其中包含有go.mod文件。

如何使用go.mod

  • 首先將go的版本升級為1.11以上

  • 設置GO111MODULE

GO111MODULE

GO111MODULE有三個值:off, on和auto(默認值)。

  • GO111MODULE=off,go命令行將不會支持module功能,尋找依賴包的方式將會沿用舊版本那種通過vendor目錄或者GOPATH模式來查找。

  • GO111MODULE=on,go命令行會使用modules,而一點也不會去GOPATH目錄下查找。

  • GO111MODULE=auto,默認值,go命令行將會根據當前目錄來決定是否啟用module功能。這種情況下可以分為兩種情形:當前目錄在GOPATH/src之外且該目錄包含go.mod文件;當前文件在包含go.mod文件的目錄下面。

go mod命令

golang 提供了 go mod命令來管理包。go mod 有以下命令:

如何理解Golang中的go mod

go.mod如何在項目中使用

首先我們要在GOPATH/src 目錄之外新建工程,或將老工程copy到GOPATH/src 目錄之外。

PS:go.mod文件一旦創建后,它的內容將會被go toolchain全面掌控。go toolchain會在各類命令執行時,比如go get、go build、go mod等修改和維護go.mod文件。

go.mod 提供了modulerequirereplaceexclude四個命令

  • module語句指定包的名字(路徑)

  • require語句指定的依賴項模塊

  • replace語句可以替換依賴項模塊

  • exclude語句可以忽略依賴項模塊

下面是我們建立了一個hello.go的文件:

package main
 
import (
	"fmt"
)
 
func main() {
    fmt.Println("Hello, world!")
}

其次,在當前目錄下,命令行運行 go mod init + 模塊名稱 初始化模塊

即go mod init hello

運行完之后,會在當前目錄下生成一個go.mod文件,這是一個關鍵文件,之后的包的管理都是通過這個文件管理。

官方說明:除了go.mod之外,go命令還維護一個名為go.sum的文件,其中包含特定模塊版本內容的預期加密哈希 
go命令使用go.sum文件確保這些模塊的未來下載檢索與第一次下載相同的位,以確保項目所依賴的模塊不會出現意外更改,無論是出于惡意、意外還是其他原因。 go.mod和go.sum都應檢入版本控制。 
go.sum 不需要手工維護,所以可以不用太關注。

注意:子目錄里是不需要init的,所有的子目錄里的依賴都會組織在根目錄的go.mod文件里

接下來,讓我們的項目引進一下第三方包

如修改hello.go文件如下,按照過去的做法,要運行hello.go需要執行go get 命令 下載gorose包到 $GOPATH/src。

package main
 
import (
	"fmt"
	"github.com/gohouse/gorose"
)
 
func main() {
    fmt.Println("Hello, world!")
}

但是,使用了新的包管理就不在需要這樣做了

直接 go run hello.go

稍等片刻… go 會自動查找代碼中的包,下載依賴包,并且把具體的依賴關系和版本寫入到go.mod和go.sum文件中,當然go會報一個引用但未真正使用的錯誤。
查看go.mod,它會變成這樣:

module test
 
require (
	github.com/gohouse/gorose v1.0.5
)

require 關鍵字是引用,后面是包,最后v1.11.1 是引用的版本號

這樣,一個使用Go包管理方式創建項目的小例子就完成了。

以上就是如何理解Golang中的go mod,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乡城县| 仙桃市| 芦山县| 富川| 特克斯县| 常州市| 安福县| 云安县| 金溪县| 广平县| 竹北市| 广元市| 临城县| 台中市| 景德镇市| 东乡| 义马市| 泾源县| 黑山县| 保山市| 定西市| 丰宁| 阿拉善右旗| 新蔡县| 牙克石市| 岢岚县| 和平区| 云梦县| 舞钢市| 龙泉市| 伊金霍洛旗| 清原| 淮阳县| 睢宁县| 墨竹工卡县| 涪陵区| 枣庄市| 福海县| 柘荣县| 广西| 漳浦县|