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

Go語(yǔ)言依賴管理三要素示例解析

 更新時(shí)間:2023年01月19日 08:43:29   作者:啵啵腸  
這篇文章主要介紹了Go語(yǔ)言依賴管理三要素及示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

背景

開發(fā)項(xiàng)目時(shí)應(yīng)學(xué)會(huì)站在巨人的肩膀上,即有效利用開發(fā)組件進(jìn)行或工具提升自己的研發(fā)效率

對(duì)于較簡(jiǎn)單的單體函數(shù)而言,只需要依賴原生的SDK即可完成開發(fā)

對(duì)于實(shí)際開發(fā)的工程較于復(fù)雜,應(yīng)將精力投放在實(shí)現(xiàn)的業(yè)務(wù)邏輯之上

  • 工程項(xiàng)目不可能基于標(biāo)準(zhǔn)庫(kù)0-1編碼搭建
  • 管理依賴庫(kù)

GOPATH 模式

GOPATH為環(huán)境變量 包含bin、pkg、src三部分

$GOPATH:項(xiàng)目根路徑

  • src:項(xiàng)目源代碼
  • bin:項(xiàng)目編譯的二進(jìn)制文件 可執(zhí)行程序
  • pkg:項(xiàng)目編譯的中間產(chǎn)物 加速編譯 第三方依賴包

運(yùn)行方式:

所有工程代碼要求放在GOPATH/src目錄下 工程本身也將作為一個(gè)依賴包,可以被其它 GOPATH/src 目錄下的工程引用 在 $GOPATH/src下進(jìn)行 .go 文件或源代碼的存儲(chǔ),我們可以稱其為 GOPATH 的模式

缺點(diǎn):

  • 沒(méi)有版本控制的概念
  • 所有項(xiàng)目都要放在$GOPATH/src目錄下,不在當(dāng)前目錄則不能編譯

GO Vendor模式

解決 GOPATH模式 所有項(xiàng)目都在$GOPATH/src目錄的問(wèn)題 可以隨處可以創(chuàng)建項(xiàng)目,不用扎堆 src 目錄下

原理:本地化構(gòu)建

在每個(gè)項(xiàng)目下都創(chuàng)建一個(gè)vendor目錄,每個(gè)項(xiàng)目所需要的以來(lái)都會(huì)下載到自己的vendor目錄下。在使用包時(shí),會(huì)先從當(dāng)前項(xiàng)目下的vendor目錄查找,然后再?gòu)腉OPATH中查找,都沒(méi)有找到最后才在GOROOT中查找(依賴尋址方式:vendor -> GOPATH)

缺點(diǎn):

  • 放棄了依賴重用,使得冗余度上升
  • 無(wú)法控制依賴的版本 更新項(xiàng)目可能出現(xiàn)依賴沖突 導(dǎo)致編譯出錯(cuò)

Go Module模式

1.16版本后默認(rèn)開啟的模式

通過(guò)go.mod文件管理依賴的版本

通過(guò)go get/go mod指令工具管理依賴包

工程不用全放在gopath/src目錄下

定義版本規(guī)則和管理項(xiàng)目依賴關(guān)系

主要改動(dòng):

  • GO MODULE模式下所有依賴的包存放在$GOPATH/pkg/mod目錄下
  • 項(xiàng)目中需要有go.mod文件,來(lái)應(yīng)用$GOPATH/pkg/mod

依賴管理三要素

  • 配置文件 描述依賴 go.mod
  • 中心倉(cāng)庫(kù)管理依賴庫(kù) Proxy
  • 本地工具 go get/mod

依賴配置 go.mod

module example.com/foobar
go 1.16
require (
    example.com/apple v0.1.2
    example.com/banana v1.2.3
    example.com/banana/v2 v2.3.4
    example.com/pineapple v0.0.0-20190924185754-1b0db40df49a
)
exclude example.com/banana v1.2.4
replace example.com/apple v0.1.2 => example.com/rda v0.1.0 
replace example.com/banana => example.com/hugebanana

go.mod 是啟用了 Go moduels 的項(xiàng)目所必須的最重要的文件,它描述了當(dāng)前項(xiàng)目(也就是當(dāng)前模塊)的元信息,每一行都以一個(gè)動(dòng)詞開頭,目前有以下 5 個(gè)動(dòng)詞:

  • module:用于定義當(dāng)前項(xiàng)目的模塊路徑。
  • go:用于設(shè)置預(yù)期的 Go 版本。
  • require:用于設(shè)置一個(gè)特定的模塊版本。
  • exclude:用于從使用中排除一個(gè)特定的模塊版本。
  • replace:用于將一個(gè)模塊版本替換為另外一個(gè)模塊版本。

這里的填寫格式基本為包引用路徑+版本號(hào),另外比較特殊的是 go $version,目前從 Go1.16 的代碼里來(lái)看,還只是個(gè)標(biāo)識(shí)作用,暫時(shí)未知未來(lái)是否有更大的作用。

go mod命令

常用的go mod命令如下:

go mod download    下載依賴的module到本地cache(默認(rèn)為$GOPATH/pkg/mod目錄)
go mod edit        編輯go.mod文件
go mod graph       打印模塊依賴圖
go mod init        初始化當(dāng)前文件夾, 創(chuàng)建go.mod文件
go mod tidy        增加缺少的module,刪除無(wú)用的module
go mod vendor      將依賴復(fù)制到vendor下
go mod verify      校驗(yàn)依賴
go mod why         解釋為什么需要依賴 

go get命令

在項(xiàng)目中執(zhí)行g(shù)o get命令可以下載依賴包,并且還可以指定下載的版本。

  • 運(yùn)行g(shù)o get -u將會(huì)升級(jí)到最新的次要版本或者修訂版本(x.y.z, z是修訂版本號(hào), y是次要版本號(hào))
  • 運(yùn)行g(shù)o get -u=patch將會(huì)升級(jí)到最新的修訂版本
  • 運(yùn)行g(shù)o get package@version將會(huì)升級(jí)到指定的版本號(hào)version 如果下載所有依賴可以使用go mod download命令。

快速使用go module

  • SET GOPROXY=goproxy.cn (這是win環(huán)境下的) export GOPROXY=goproxy.cn (這是mac環(huán)境下的)
  • go mod init [包名] // 初始化項(xiàng)目(如果你是初始化項(xiàng)目直接 go mod init 就好了)
  • 在目錄文件下會(huì)生成go.mod和go.sum文件 go.mod 里面包含了所有的包!
  • 在文件里面引入包名的時(shí)候有的編輯器會(huì)報(bào)錯(cuò)但是是可以正常編譯的
  • 下載包使用go get
  • 修改包的版本號(hào)直接去go.mod文件修改然后go mod download

小結(jié)

今天學(xué)習(xí)到的內(nèi)容還需要進(jìn)一步的消化,我也是打算將并發(fā)編程這一塊的內(nèi)容熟悉透徹了再進(jìn)行下一部分的課程學(xué)習(xí)。如果筆記中有錯(cuò)誤的地方也希望掘友們可以及時(shí)的提出糾正。

以上就是Go語(yǔ)言依賴管理三要素示例解析的詳細(xì)內(nèi)容,更多關(guān)于Go語(yǔ)言依賴管理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go語(yǔ)言反射reflect.Value實(shí)現(xiàn)方法的調(diào)用

    Go語(yǔ)言反射reflect.Value實(shí)現(xiàn)方法的調(diào)用

    本文主要介紹了Go語(yǔ)言反射reflect.Value實(shí)現(xiàn)方法的調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • go run main.go 一直提示找不到包的解決方案

    go run main.go 一直提示找不到包的解決方案

    這篇文章主要介紹了go run main.go 一直提示找不到包的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • 讓Go反射變快的方法實(shí)例探究

    讓Go反射變快的方法實(shí)例探究

    反射允許你在運(yùn)行時(shí)獲得有關(guān) Go 類型的信息,如果你曾經(jīng)愚蠢地嘗試編寫 json.Unmarshal 之類的新版本,本文將探討的就是如何使用反射來(lái)填充結(jié)構(gòu)體值
    2024-01-01
  • Golang標(biāo)準(zhǔn)庫(kù)unsafe源碼解讀

    Golang標(biāo)準(zhǔn)庫(kù)unsafe源碼解讀

    這篇文章主要為大家介紹了Golang標(biāo)準(zhǔn)庫(kù)unsafe源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Go語(yǔ)言實(shí)現(xiàn)lru淘汰策略和超時(shí)過(guò)期

    Go語(yǔ)言實(shí)現(xiàn)lru淘汰策略和超時(shí)過(guò)期

    緩存的大小是有限的,當(dāng)添加數(shù)據(jù)發(fā)現(xiàn)剩余緩存不夠時(shí),需要淘汰緩存中的部分?jǐn)?shù)據(jù),本文主要介紹了Go語(yǔ)言實(shí)現(xiàn)lru淘汰策略和超時(shí)過(guò)期,感興趣的可以了解一下
    2024-02-02
  • golang validator庫(kù)參數(shù)校驗(yàn)實(shí)用技巧干貨

    golang validator庫(kù)參數(shù)校驗(yàn)實(shí)用技巧干貨

    這篇文章主要為大家介紹了validator庫(kù)參數(shù)校驗(yàn)實(shí)用技巧干貨,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • Go語(yǔ)言入門之基礎(chǔ)語(yǔ)法和常用特性解析

    Go語(yǔ)言入門之基礎(chǔ)語(yǔ)法和常用特性解析

    這篇文章主要給大家講解了Go語(yǔ)言的基礎(chǔ)語(yǔ)法和常用特性解析,比較適合入門小白,文中通過(guò)代碼示例介紹的非常詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助,需要的朋友可以參考下
    2023-07-07
  • Golang遞歸獲取目錄下所有文件方法實(shí)例

    Golang遞歸獲取目錄下所有文件方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Golang遞歸獲取目錄下所有文件的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Go秒爬博客園100頁(yè)新聞

    Go秒爬博客園100頁(yè)新聞

    利用go語(yǔ)言的協(xié)程并發(fā)優(yōu)勢(shì)爬取網(wǎng)頁(yè)速度相當(dāng)之快,博客園100頁(yè)新聞標(biāo)題只需一秒即可全部爬取,跟著小編一起去看看如何實(shí)現(xiàn)的,希望大家可以從中受益
    2018-09-09
  • 初步解讀Golang中的接口相關(guān)編寫方法

    初步解讀Golang中的接口相關(guān)編寫方法

    這篇文章主要介紹了Golang中的接口相關(guān)編寫方法,是Go語(yǔ)言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11

最新評(píng)論