真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Go語言的包和依賴管理-創(chuàng)新互聯(lián)

這篇文章的知識點包括:golang的簡介、golang的依賴管理、golang的包管理以及GoCenter的使用,閱讀完整文相信大家對Go語言的包和依賴管理有了一定的認(rèn)識。

站在用戶的角度思考問題,與客戶深入溝通,找到旬陽網(wǎng)站設(shè)計與旬陽網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋旬陽地區(qū)。

一、背景

Go語言是Google開發(fā)的一種靜態(tài)強(qiáng)類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語言。為了方便搜索和識別,有時會將其稱為Golang。自2009年11月Google正式宣布推出,成為開放源代碼項目以來,Go語言已成為當(dāng)今開發(fā)人員和DevOps領(lǐng)域最流行的語言之一, 它被用于設(shè)計和編寫Kubernetes和Helm。但是,相比語言本身已經(jīng)得到了廣泛的普及和使用,Go語言的包管理方案卻大大滯后了。
Go語言生態(tài)系統(tǒng)中缺少的是標(biāo)準(zhǔn)化——沒有用于依賴關(guān)系管理的標(biāo)準(zhǔn)工具, 也沒有標(biāo)準(zhǔn)的包格式或兼容的包倉庫規(guī)范。這意味著開發(fā)人員無法使用Go語言創(chuàng)建可重現(xiàn)的構(gòu)建, 這是一個相當(dāng)大的問題。這些年來, 社區(qū)推出了諸如dep、godep、glide和govender等工具,試圖用來處理Go語言的依賴管理, 但并未成功。2018年Google在Go1.11官方推出了Go modules,為Go語言提供了支持版本化的依賴管理方案。
Go modules現(xiàn)在已成為Go語言標(biāo)準(zhǔn)的依賴管理工具和包倉庫規(guī)范。而GoCenter為Go modules的實現(xiàn)和推廣提供了依賴包的公共倉庫,使得Go語言的開發(fā)人員能夠更為穩(wěn)定和方便地開發(fā)可重復(fù)構(gòu)建的Go應(yīng)用程序。

二、Go語言的依賴管理

在介紹GoCenter之前,我們先簡要地回顧一下Go語言依賴管理的發(fā)展歷程。
Go語言在推出之初,并沒有明確的依賴管理方案。只是在構(gòu)建過程中通過go get命令,將用import聲明的依賴從對應(yīng)的源,通常是git上的項目,下載到$GOPATH/src目錄下,和Go應(yīng)用自身的代碼放在一起。這種依靠GOPATH來管理依賴的機(jī)制帶來的問題 是顯而易見的,比如:
?  因源依賴包自身的變化,導(dǎo)致不同時間構(gòu)建Go應(yīng)用時go get得到的依賴實質(zhì)上是不同的,即不能實現(xiàn)可重復(fù)的構(gòu)建;
?  或者因源依賴包自身的變化,重新構(gòu)建Go應(yīng)用時會引入不兼容的新實現(xiàn),導(dǎo)致Go應(yīng)用無法通過編譯。
因此在1.5版本以前,為了規(guī)避這個問題,通常需要將使用的依賴包手工拷貝出來。
為了實現(xiàn)Go應(yīng)用的可重復(fù)構(gòu)建,Go1.5引入了Vendor機(jī)制。Vendor機(jī)制的核心就是在GOPATH下面增加了vendor文件夾。Go應(yīng)用所需的依賴都可以從依賴源fork出所需的分支,存放到vendor文件夾。當(dāng)構(gòu)建Go應(yīng)用時,Go編譯器會優(yōu)先在vendor文件夾下搜索依賴的第三方包,vendor文件夾下沒有才會再到$GOPATH/src下去找。這樣只要開發(fā)者預(yù)先將特定版本的依賴包存放在vendor文件夾,并提交到Go 項目的code repo,那么所有人理論上都會得到同樣的編譯結(jié)果,從而實現(xiàn)可重復(fù)構(gòu)建。 在Go1.5發(fā)布后的若干年,Go社區(qū)把注意力都集中在如何利用Vendor機(jī)制解決Go應(yīng)用的依賴管理問題,并誕生了眾多的依賴管理工具,如dep、golide、govendor等。然而,和Java的Maven、Python的Pypi、C/C++的Conan等業(yè)界成熟的依賴管理方案相比,Vender機(jī)制仍然存在許多問題,比如:
?  Vendor文件夾中的依賴包沒有版本信息。這樣依賴包脫離了版本管理,對于一致性管理、升級,以及問題追溯等場景,都會難以處理;
?  Vendor機(jī)制沒有給出如何能夠方便地得到Go項目依賴了哪些包,并將其拷貝到vendor文件夾下的方案,多數(shù)情況下還需要到不同的Git源項目里手工拷貝;
?  當(dāng)依賴的包比較多的時候,vendor文件夾也會變得非常龐大。
2018年年初,Go核心Team的技術(shù)leader,也是Go Team最早期成員之一的Russ Cox在個人博客上連續(xù)發(fā)表了七篇文章,系統(tǒng)闡述了Go team解決“包依賴管理”的技術(shù)方案:vgo。vgo的主要思路包括:語義導(dǎo)入版本控制(Semantic Import Versioning)、最小版本選擇(Minimal Version Selection)、以及引入Go module等。同年5月份,Russ Cox的提案“cmd/go: add package version support to Go toolchain”被社區(qū)接受,vgo的代碼合并到Go主干,并將這套機(jī)制正式命名為“go modules”。由于vgo項目本身就是一個實驗原型,merge到主干后,vgo這個術(shù)語以及vgo項目的使命也就此結(jié)束了。后續(xù)Go modules機(jī)制將直接在Go主干上繼續(xù)演化。
Go modules機(jī)制的主要變化包括:
?  去除了飽受詬病的GOPATH的限制。Go編譯器將不再到GOPATH下面的vendor或src文件夾下搜索Go應(yīng)用構(gòu)建依賴的第三方包;
?  Go modules機(jī)制為在同一應(yīng)用repo下面的包賦予了一個新的抽象概念: 模塊(module),即可重用的Go代碼包,并啟用一個新的文件go.mod記錄模塊的元信息和依賴關(guān)系。而在go.mod里明確描述了依賴包的版本信息,同一個依賴包也可以記錄多個不同的版本。除了精確版本外,go.mod還支持用表達(dá)式模糊地定義依賴版本;
?  在Go modules機(jī)制下,還支持創(chuàng)建Go依賴包的公共倉庫。這是因為應(yīng)用程序包含的Go模塊,必須從數(shù)千個獨立的源代碼存儲庫中解析,而每個存儲庫的維護(hù)紀(jì)律可能各不相同。因此,需要存在一個可公開訪問的存儲庫,通過Go modules提供的依賴描述、解析機(jī)制,為Go的開發(fā)者提供一致的、可分享的、支持重復(fù)構(gòu)建的、穩(wěn)定的Go依賴包源。GoCenter就是這種Go依賴包公共倉庫的重要實現(xiàn)。

三、GoCenter簡介

GoCenter通過創(chuàng)建Go模塊的公共中央倉庫,提供可重復(fù)和快速依賴解析的依賴包管理方案,解決了Go開發(fā)人員查找和獲取Go依賴包的困難。GoCenter將直接從源代碼存儲庫獲取Go項目,轉(zhuǎn)變?yōu)樘幚砗万炞C不可變的、具備版本控制的Go模塊, 并將其免費提供給Go應(yīng)用的開發(fā)人員。
GoCenter(https://gocenter.io)提供了通過公共Go代理解析模塊, 包括通過托管免費服務(wù)搜索模塊的能力。從創(chuàng)建開始, GoCenter已經(jīng)包括了數(shù)千個廣受歡迎的 Go項目的模塊, Go開發(fā)者可以立即使用這些項目進(jìn)行自己的構(gòu)建。
Go語言的包和依賴管理

開發(fā)人員也可以提交自己的Go項目加入GoCenter,以便將其提供給Go社區(qū)開發(fā)者,從而得到更為廣泛地應(yīng)用。
Go語言的包和依賴管理

GoCenter這個中央倉庫,提供了預(yù)先打包,以及版本化的Go模塊,使得Go開發(fā)人員或團(tuán)隊不再需要為使用公共模塊而構(gòu)建自己的模塊庫, 從而消減了使用 Go 語言的巨大成本。
此外,如果Go開發(fā)者或團(tuán)隊已經(jīng)有了自己的JFrog Artifactory倉庫,就可以通過配置指向GoCenter的遠(yuǎn)程倉庫,為重復(fù)構(gòu)建提供完全的本地化控制,并可以預(yù)防訪問GoCenter的網(wǎng)絡(luò)連接問題。

四、基于GoCenter構(gòu)建Go應(yīng)用

要構(gòu)建Go應(yīng)用項目,首先需要安裝Go客戶端(版本1.11.0 或更新的版本) 。而安裝Go之后,有三種方法可以從GoCenter解析Go模塊:使用goc、使用 go 客戶端,或部署本地倉庫(如Artifactory),以代理GoCenter。

1、使用goc

推薦在構(gòu)建中使用GoCenter的方式是通過goc工具。goc工具包裝了Go的客戶端,器, 能夠使用GoCenter中的包正確構(gòu)建Go應(yīng)用,而無需手動設(shè)置。
要安裝goc,需要使用以下的curl命令,或按照goc的github主頁(https://github.com/jfrog/goc)的說明:
$ curl -fL https://getgoc.gocenter.io | sh
然后, 就可以從Go項目的根目錄中運行任何命令, 就像運行Go命令一樣。例如:
$ goc build
goc工具自動分配GOPROXY連接GoCenter,所以能夠優(yōu)先從該倉庫解析Go的依賴包。對于在GoCenter找不到的包,goc將會試圖通過源代碼控制系統(tǒng)來解析它們,以更好地保證成功構(gòu)建Go項目。
Go客戶端自身不能執(zhí)行這種輔助操作(請參閱下文), 因此至少在 GoCenter能夠為大多數(shù)Go開發(fā)人員提供可能需要的所有依賴之前,仍然建議使用goc。

2、使用Go客戶端

推薦在構(gòu)建中使用GoCenter的方式是通過goc工具。goc工具包裝了Go的客戶端,器, 能夠使用GoCenter中的包正確構(gòu)建Go應(yīng)用,而無需手動設(shè)置。
如上所述,使用GoCenter時并不建議直接利用Go客戶端進(jìn)行構(gòu)建,因為當(dāng)在GoCenter找不到相關(guān)依賴包時構(gòu)建會失敗。對于Go客戶端這種限制的詳細(xì)信息,可以參考相關(guān)的issue和修正信息(https://github.com/golang/go/issues/26334)。Go開發(fā)人員還是應(yīng)該改用goc。
當(dāng)然,如果在充分了解這個限制還希望使用的情況下,也是可以使用Go客戶端的。
如果希望構(gòu)建Go項目時從GoCenter中獲取相關(guān)依賴包,需要設(shè)置GOPROXY指向GoCenter的URL,https://gocenter.io:
$ export GOPROXY=https://gocenter.io
現(xiàn)在就可以使用Go客戶端構(gòu)建Go應(yīng)用了:
$ go build

3、部署代理GoCenter的私有倉庫

如果使用的是如Artifactory這樣的私有倉庫,則只需設(shè)置GOPROXY指向該私有倉庫,而把GoCenter創(chuàng)建為該私有倉庫當(dāng)中的遠(yuǎn)程倉庫。
為了要在Artifactory里創(chuàng)建代理GoCenter的遠(yuǎn)程倉庫,需要遵循以下步驟:

  1. 創(chuàng)建新的遠(yuǎn)程倉庫,并設(shè)置包類型為Go;
  2. 設(shè)置遠(yuǎn)程倉庫的名字,并在URL字段輸入https://gocenter.io/;
  3. 點擊“保存 & 完成”按鍵。
    還可以創(chuàng)建虛擬倉庫,用以聚合同時從本地Go倉庫和遠(yuǎn)程倉庫獲取的Go依賴包。
    一旦在Artifactory里配置好使用GoCenter,就可以使用標(biāo)準(zhǔn)的GOPROXY方式基于Artifactory進(jìn)行構(gòu)建。需要注意的是,根據(jù)Artifacotry上的設(shè)置,需要適當(dāng)?shù)靥幚砜蛻舳说恼J(rèn)證信息,應(yīng)為當(dāng)前Go客戶端在獲取模塊時是不會發(fā)送相關(guān)認(rèn)證信息的,所以處理起來是有一定難度的。因此,當(dāng)使用Artifactory代理GoCenter時,建議使用JFrog CLI來構(gòu)建Go應(yīng)用。當(dāng)配置好JFrog CLI和Artifactory的關(guān)聯(lián)之后,就可以使用類似于
    “jfrog rt go build”的命令來從Artifactory獲取依賴,并構(gòu)建Go應(yīng)用。
    使用JFrog CLI的好處是可以方便地向Artifactory上傳針對特定構(gòu)建而創(chuàng)建的依賴包,也同時內(nèi)置支持生成和發(fā)布與構(gòu)建過程相關(guān)的元數(shù)據(jù)。詳細(xì)信息,請參考JFrog CLI的相關(guān)文檔。

    五、搜索Go模塊

    GoCenter首頁中的搜索框可幫助按特定模塊名稱(例如, "虹膜")進(jìn)行搜索。當(dāng)執(zhí)行搜索時,GoCenter將列出與搜索名稱匹配或部分匹配的模塊。
    Go語言的包和依賴管理

點擊列表中的某個模塊,將會列出GoCenter中該模塊的所有版本:
Go語言的包和依賴管理

列出的版本都利用顏色編碼來指示其當(dāng)前的可用狀態(tài):
綠色,表示該模塊版本已在GoCenter之中且處于可用狀態(tài);
紅色,表示該模塊版本不存在,而且不可用;
灰色,表示該模塊版本正在引入的過程中,尚未可用。
搜索結(jié)果還會顯示那些Go項目在相關(guān)Git代碼庫存在,而在GoCenter尚不存在的模塊版本列表。如果有這樣的缺失版本,可以通過單擊“Add missing version(s)”把它們 添加到GoCenter。

六、提交自己的Go模塊

如果希望將自己的Go項目添加到GoCenter,使其可被Go社區(qū)的開發(fā)人員使用,則需要提交相關(guān)的加入申請。
首先可以對希望加入的模塊名執(zhí)行搜索。如果相關(guān)模塊并不存在,則可以單擊“Add”圖標(biāo)來請求添加模塊。一旦點擊,將會看到加入申請表格。在表格中,可以輸入申請加入的Go模塊的URL。通過搜索該模塊的結(jié)果可以查看該模塊的加入進(jìn)度。
GoCenter將依據(jù)以下最低標(biāo)準(zhǔn)來驗證加入請求:
?  Go模塊位于gihub.com或gopkg.in上的公共項目(repo);
?  該項目沒有被設(shè)置為存檔狀態(tài)(archived);
?  該項目至少擁有3顆星

看完上述內(nèi)容,你們對Go語言的包和依賴管理有進(jìn)一步的了解嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


文章題目:Go語言的包和依賴管理-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://weahome.cn/article/gghgj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部