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

Golang 1.16 中 Modules的主要變化更新

 更新時間:2021年02月24日 14:25:16   作者:陶士涵  
這篇文章主要介紹了Golang 1.16 中 Modules的主要變化更新,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

01介紹

Golang 1.16 已經(jīng)正式發(fā)布了,其中 Modules 有一些變化:

  • 默認開啟 Modules。
  • 不自動修改 go.mod 和 go.sum。
  • 通過指定 @version 后綴安裝特定版本可執(zhí)行文件。
  • 新增 retract 指令撤回 Module 版本。
  • 使用新增配置變量 GOVCS 指定特定模塊使用特定版本控制工具。

golang 1.16 默認開啟 Modules,即使不存在go.mod,Go 命令現(xiàn)在默認情況下也會在module-aware(模塊感知)模式下構(gòu)建包。

在 golang 1.16 中,通過設置關(guān)閉GO111MODULE環(huán)境變量,在GOPATH模式下構(gòu)建包仍然是可能的。您還可以將GO111MODULE設置為auto,以便在當前目錄或任何父目錄中存在go.mod文件時啟用module-aware(模塊感知)模式。您還可以使用go env -w永久設置GO111MODULE和其他變量,:

goenv-wGO111MODULE=auto

Go 官方計劃在Go 1.17中放棄對GOPATH模式的支持。換句話說,Go 1.17將忽略GO111MODULE。如果您的項目不在module-aware(模塊感知)模式下構(gòu)建,則現(xiàn)在是時候遷移至module-aware(模塊感知)模式了。

03不自動修改go.mod和go.sum

在 golang 1.16 之前版本中,當 go 命令發(fā)現(xiàn)go.modgo.sum存在問題時,如缺少require指令或缺少sum,它將嘗試自動解決問題。Go 官方收到很多反饋,這種行為是令人驚訝的,特別是對于 go 命令,如go list,通常沒有副作用。自動修復并不總是可取的:如果任何所需模塊不提供導入的包,Go 命令將添加新的依賴項,可能觸發(fā)常見依賴項的升級。即使輸入路徑拼寫錯誤,也會導致(失敗的)網(wǎng)絡查找。

在 golang 1.16 中,module-aware(模塊感知)命令在go.modgo.sum中發(fā)現(xiàn)問題后報告錯誤,而不是嘗試自動解決問題。在大多數(shù)情況下,錯誤消息中列出建議命令來解決問題,例如:

$ go build
example.go:3:8: no required module provides package golang.org/x/net/html; to add it:
 go get golang.org/x/net/html
$ go get golang.org/x/net/html
$ go build

golang 1.16 與 Go 之前版本一樣,如果vendor目錄存在,Go 命令可能會使用vendor目錄。go getgo mod tidy命令仍然修改go.modgo.sum,因為他們的主要目的是管理依賴關(guān)系。

04通過指定@version后綴安裝特定版本可執(zhí)行文件

go install命令現(xiàn)在可以通過指定@version后綴安裝特定版本的可執(zhí)行文件,例如:

go install golang.org/x/tools/gopls@v0.6.5

如果使用@version后綴,go install命令使用該確切 Module 版本,忽略當前目錄和父目錄中的任何go.mod文件中的 Module 版本。

如果沒有@version后綴,go install繼續(xù)運行,因為它一直有,建立程序使用當前模塊的go.mod文件中 requirements 列表和 replacements 列表列出的版本。

為了消除使用哪個版本的模糊性,在使用此安裝語法go install program@latest時,Go 程序的 go.mod 文件中可能存在幾個限制的指令。特別是,至少目前不允許replaceexclude指令。從長遠來看,一旦新的go install program@version在大多數(shù)使用情況下工作的很好的前提下,Go 官方計劃在未來某個版本中讓go get命令停止安裝二進制文件。

05新增retract指令撤回 Module 版本

您是否在模塊版本準備好之前意外地發(fā)布了該版本?或者,您是否在發(fā)布需要快速修復的版本后發(fā)現(xiàn)了問題?已發(fā)布版本中的錯誤很難更正。為了保持模塊生成的確定性,版本發(fā)布后無法修改。即使您刪除或更改了版本標簽,proxy.golang.org和其他代理可能已經(jīng)有原始緩存。

模塊作者現(xiàn)在可以使用go.mod中的retract指令 retract 模塊版本。retract 的版本仍然存在,可以下載(因此依賴于它的構(gòu)建不會中斷),但 go 命令在解決@latest等版本時不會自動選擇它。go getgo list -m -u會打印有關(guān)現(xiàn)有用途的警告。

例如,假設一個流行的庫的作者example.com/lib發(fā)布 v1.0.5,然后發(fā)現(xiàn)一個新的安全問題。他們可以添加指令到他們的go.mod文件,例如:

//Remote-triggeredcrashinpackagefoo.SeeCVE-2021-01234.
retractv1.0.5

接下來,作者可以 tag 和 push 版本 v1.0.6,新的最高版本。在此之后,已依賴 v1.0.5 的用戶在檢查更新或升級依賴包時將收到撤回通知。通知消息可能包括收回指令上方注釋的文本。例如:

$ go list -m -u all
example.com/lib v1.0.0 (retracted)
$ go get .
go: warning: example.com/lib@v1.0.5: retracted by module author:
 Remote-triggered crash in package foo. See CVE-2021-01234.
go: to switch to the latest unretracted version, run:
 go get example.com/lib@latest

06使用新增配置變量 GOVCS 指定特定模塊使用特定版本控制工具

go 命令可以從鏡像proxy.golang.org或直接從版本控制存儲庫下載模塊源代碼,使用 git、hg、svn、bzr 或 fossil。直接版本控制訪問很重要,尤其是對于代理上不可用的私有模塊,但它也可能是一個安全問題:版本控制工具中的錯誤可能被惡意服務器利用來運行惡意代碼。

Go 1.16 引入了一個新的配置變量 GOVCS,它允許用戶指定哪些模塊允許使用特定的版本控制工具。GOVCS 接受一個逗號分隔的模式列表:vcslist 規(guī)則。

模式是一條path.Match。匹配模式匹配模塊路徑的一個或多個主要元素。公共和私有的特殊模式匹配公共和私有模塊(私有定義為與 GOPRIVATE 中的模式匹配的模塊;公共是其他一切模塊)。vcslist 是允許版本控制命令或關(guān)鍵字 all 或 off 的管道分隔列表。例如:

GOVCS=github.com:git,evil.com:off,*:git|hg

使用此設置,可以使用 git 下載帶有github.com路徑的模塊;無法使用任何版本控制命令下載evil.com上的路徑,使用 git 或 hg 下載所有其他路徑(*匹配所有內(nèi)容)的模塊。

如果未設置環(huán)境變量 GOVCS,或者如果模塊與任何模式不匹配,Go 命令將使用 GOVCS 的默認值:允許 git 和 hg 用于公共模塊,并且允許所有工具用于私有模塊。

設置只允許使用 Git 和 Mercurial 的理由是,這兩個版本控制工具最關(guān)注作為不受信任服務器的客戶端運行的問題。相比之下,Bazaar、Fossil 和 Subversion 主要用于受信任的、經(jīng)過驗證的環(huán)境中,而且沒有像 attack surfaces 那樣受到很好的審查。即默認設置為:

GOVCS=public:git|hg,private:all

07Module 未來發(fā)展

我們希望您發(fā)現(xiàn)這些功能很有用。我們已經(jīng)開始開發(fā) Go 1.17 的模塊功能,特別是懶惰的模塊加載,這應該使模塊加載過程更快,更穩(wěn)定。

08總結(jié)

本文主要介紹了 Golang 1.16 針對 Module 做的一些變化。通過 Go 官方的這些 Module 變化,切實解決了 Go 用戶在使用 Go 時的實際問題。Go 官方也表示會在 Golang 1.17 計劃徹底去除GOPATH模式,所以,如果您的項目目前還沒有遷移到 Module 模式,是時候開始遷移了。

到此這篇關(guān)于Golang 1.16 中 Modules的主要變化更新的文章就介紹到這了,更多相關(guān)Golang Modules變化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang 切片的三種使用方式及區(qū)別的說明

    golang 切片的三種使用方式及區(qū)別的說明

    這篇文章主要介紹了golang 切片的三種使用方式及區(qū)別的說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 淺談Go語言中字符串和數(shù)組

    淺談Go語言中字符串和數(shù)組

    這篇文章主要簡單介紹了Go語言中字符串和數(shù)組的使用方法和申明方式,需要的朋友可以參考下
    2015-01-01
  • golang編程開發(fā)使用sort排序示例詳解

    golang編程開發(fā)使用sort排序示例詳解

    這篇文章主要為大家介紹了go語言編程開發(fā)使用sort來排序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2021-11-11
  • Go語言實現(xiàn)操作MySQL的基礎知識總結(jié)

    Go語言實現(xiàn)操作MySQL的基礎知識總結(jié)

    這篇文章主要總結(jié)一下怎么使用Go語言操作MySql數(shù)據(jù)庫,文中的示例代碼講解詳細,需要的朋友可以參考以下內(nèi)容,希望對大家有所幫助
    2022-09-09
  • Golang中的http.Server源碼深入分析

    Golang中的http.Server源碼深入分析

    這篇文章主要介紹了Golang中的http.Server源碼,實現(xiàn)一個http.Server非常容易,只需要短短幾行代碼,同時有了協(xié)程的加持,Go實現(xiàn)的http.Server能夠取得非常優(yōu)秀的性能,下面我們來分析看看http.Server的源碼
    2023-05-05
  • Go語言中排序的3種實現(xiàn)方法

    Go語言中排序的3種實現(xiàn)方法

    在寫代碼過程中,排序是經(jīng)常會遇到的需求,這篇文章主要為大家介紹三種常用的方法,文中的示例代碼簡潔易懂,需要的小伙伴可以參考下
    2023-08-08
  • golang數(shù)組-----尋找數(shù)組中缺失的整數(shù)方法

    golang數(shù)組-----尋找數(shù)組中缺失的整數(shù)方法

    這篇文章主要介紹了golang數(shù)組-----尋找數(shù)組中缺失的整數(shù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 四種Golang實現(xiàn)middleware框架的方式小結(jié)

    四種Golang實現(xiàn)middleware框架的方式小結(jié)

    middleware是一般框架里面常用的形式,比如web框架、rpc框架等,本文為大家詳細介紹了四種實現(xiàn)middleawre的方式,感興趣的可以了解一下
    2024-03-03
  • Golang中map的三種聲明定義方式實現(xiàn)

    Golang中map的三種聲明定義方式實現(xiàn)

    本文主要介紹了Golang中map的三種聲明定義方式實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Go?的入口函數(shù)和包初始化的使用

    Go?的入口函數(shù)和包初始化的使用

    本文主要介紹了Go?的入口函數(shù)和包初始化的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05

最新評論