日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢(xún)客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

自從在Go 1.11和更高版本中引入了Go的新的依賴(lài)管理系統(tǒng)以來(lái),GoLang開(kāi)發(fā)人員已經(jīng)接受了包版本控制解決方案。這樣做的用戶(hù)可以使用GoCenter存儲(chǔ)庫(kù)中的 不可變 公共Go 模塊,并通過(guò)更健壯、更可靠的Go Pipeline獲得更快的構(gòu)建速度。

但是,將現(xiàn)有的項(xiàng)目轉(zhuǎn)換為使用Go Module并不總是很容易,尤其是如果該項(xiàng)目已經(jīng)嘗試過(guò)GoLang的其他包管理解決方案時(shí)。

為了幫助GoLang社區(qū)正確地使用Go Module,我們將使用開(kāi)源的etcd項(xiàng)目(Kubernetes使用的鍵值數(shù)據(jù)存儲(chǔ))作為示例。這是一個(gè)最佳實(shí)踐的實(shí)際示例,因?yàn)樗銐驈?fù)雜,可以展示一些常見(jiàn)的實(shí)踐

 

Go 項(xiàng)目依賴(lài)管理痛點(diǎn)分析

傳統(tǒng)GO項(xiàng)目進(jìn)行第三方模塊依賴(lài)時(shí),往往是去下載第三方源碼,這種方式將存在以下常見(jiàn)問(wèn)題:

  1. 性能及穩(wěn)定性:每次下載從各大VCS系統(tǒng)下載源碼性能低,依賴(lài)網(wǎng)絡(luò)環(huán)境,穩(wěn)定性差
  2. 一致性&可重復(fù)性:容易收到依賴(lài)源的影響,我們往往在感知不到模塊提供方的改動(dòng)時(shí),就下載了新版的代碼,兩次依賴(lài)某模塊得到的依賴(lài)不一致,往往造成前一秒還行,下一秒構(gòu)建失敗的情形,尤其在持續(xù)集成系統(tǒng)中
  3. 協(xié)作:源碼方式模塊基本無(wú)版本概念,或不是語(yǔ)義類(lèi)型,多團(tuán)隊(duì)協(xié)作困難

基于以上問(wèn)題及痛點(diǎn),建議轉(zhuǎn)換為Go Module 模式管理Go 項(xiàng)目依賴(lài)。附Go Module 基于Go Proxy進(jìn)行依賴(lài)下載的原理圖:

10分鐘將你的Go工程轉(zhuǎn)換為Go Module模式

 

應(yīng)用Go Module方式后可以獲得以下收益:

  1. 可用性(標(biāo)簽tag可以從VCS中刪除)
  2. 不變性(可以在VCS中進(jìn)行更改)
  3. 快速:(沒(méi)有g(shù)it克隆,沒(méi)有計(jì)算元數(shù)據(jù),調(diào)用更少,性能好)
  4. 本地統(tǒng)一存儲(chǔ)緩存($GOPATH/pkg /mod/cache)

Go模塊轉(zhuǎn)換最佳實(shí)踐

我們以ETCD項(xiàng)目為例進(jìn)行轉(zhuǎn)換,這個(gè)轉(zhuǎn)換過(guò)程已通過(guò)測(cè)試用例的驗(yàn)證,可以到該項(xiàng)目中的 Pull Request 中查看

步驟一:準(zhǔn)備go.mod文件

對(duì)于以前從未使用過(guò)模塊的項(xiàng)目(沒(méi)有g(shù)o.mod 文件),或者任何現(xiàn)在不推薦的依賴(lài)項(xiàng)管理解決方案,這個(gè)過(guò)程都非常簡(jiǎn)單。您只需要在項(xiàng)目的根目錄中運(yùn)行g(shù)o mod tidy。這將生成一個(gè)新的、已填充好該項(xiàng)目依賴(lài)描述的go.mod文件。

但是,如果項(xiàng)目使用了那些較老的解決方案之一,比如dep、glide、govendor或godep,那么您將需要運(yùn)行g(shù)o mod init來(lái)生成填充的go.mod文件。該命令支持舊格式中依賴(lài)項(xiàng)描述。

etcd項(xiàng)目確實(shí)有一個(gè)go.mod文件,盡管它從未在項(xiàng)目的構(gòu)建系統(tǒng)中啟用。問(wèn)題是模塊名稱(chēng)沒(méi)有正確的版本標(biāo)識(shí)符,因?yàn)楫?dāng)前版本標(biāo)記是v2+。由于 語(yǔ)義化導(dǎo)入版本控制 的影響,需要更改為v3。

其包括執(zhí)行以下過(guò)程:

1. 更新etcd的go.mod文件以修正模塊名稱(chēng),使其包含v3后綴。

10分鐘將你的Go工程轉(zhuǎn)換為Go Module模式

 

2. 更新所有代碼中的Import以包含版本號(hào)。我們編寫(xiě)了一個(gè)腳本,以便更容易地修改所有引用。完成后,此更改如下:

10分鐘將你的Go工程轉(zhuǎn)換為Go Module模式

 

步驟二 : 啟用Go模塊

要使go客戶(hù)端能夠使用go module,需要設(shè)置GO111MODULE=on

正如我們所指出的,etcd項(xiàng)目已經(jīng)設(shè)置了go.mod文件,有人可能認(rèn)為這已經(jīng)完成了。但它沒(méi)有,而該環(huán)境變量這種缺失證實(shí)了該項(xiàng)目還沒(méi)有使用go module。

注意:從Go 1.13開(kāi)始,這一步將不再需要,因?yàn)镚o Module將在默認(rèn)情況下啟用

步驟三 : 更新測(cè)試中的導(dǎo)入

在上面的過(guò)程中,我們對(duì)組成etcd主模塊的go.mod文件進(jìn)行了更新,以使用v3版本標(biāo)記。現(xiàn)在主模塊被標(biāo)記為v3,我們還需要更新etcd項(xiàng)目的測(cè)試用例中的Import引用v3,以確保它們導(dǎo)入了主模塊的正確版本。

步驟四 : 其他更新

在這些更改之后,您可能希望保持良好的狀態(tài)—畢竟,應(yīng)用程序模塊現(xiàn)在已經(jīng)全部轉(zhuǎn)換為使用go module,并使用正確的版本標(biāo)記。

不過(guò)沒(méi)那么快。一旦你開(kāi)始運(yùn)行測(cè)試,你會(huì)發(fā)現(xiàn)兩個(gè)額外的場(chǎng)景需要處理:

1. etcd使用了諸如golint、gosimple、staticcheck、ineffassign等靜態(tài)分析工具,但其中一些工具沒(méi)有模塊意識(shí),無(wú)法識(shí)別模塊路徑,而無(wú)法通過(guò)必要的檢查。在etcd的這種場(chǎng)景下,etcd-io/etcd下并沒(méi)有v3文件夾,但是Import導(dǎo)入(或模塊路徑)包含v3,如etcd-io/etcd/v3。其他工具是模塊感知的,但必須在新版本的Go 12中可用。如果構(gòu)建系統(tǒng)在11之上,那么它們也需要遷移到12。

2. 如果使用了protobuf之類(lèi)的代碼生成器。更新.proto文件,以便使用正確版本的導(dǎo)入生成代碼。

步驟五 : 加入GoCenter

在構(gòu)建過(guò)程中,您可能會(huì)注意到許多go get命令在etcd的不同階段執(zhí)行。

為了加快GoLang應(yīng)用程序的構(gòu)建時(shí)間,并確保etcd ppipeline中使用的Go Module版本的不可變性和可用性,使用GoCenter來(lái)構(gòu)建etcd

只需設(shè)置GOPROXY=https://gocenter.io。(詳細(xì)原理可看上文的Go Proxy 原理圖)

總結(jié)

正如您所看到的,將Go項(xiàng)目轉(zhuǎn)換為使用Go Module方式非常簡(jiǎn)單,但是有一些細(xì)節(jié)可能會(huì)減慢您的速度。通過(guò)選擇這個(gè)具有豐富場(chǎng)景的項(xiàng)目來(lái)演示這個(gè)過(guò)程,我們相信我們達(dá)到了大多數(shù)需要處理的場(chǎng)景,為您提供了一個(gè)很好的示例,覆蓋了您可能面臨的情況。

分享到:
標(biāo)簽:Module
用戶(hù)無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定