最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言依賴管理三要素示例解析

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

背景

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

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

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

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

GOPATH 模式

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

$GOPATH:項目根路徑

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

運行方式:

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

缺點:

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

GO Vendor模式

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

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

在每個項目下都創(chuàng)建一個vendor目錄,每個項目所需要的以來都會下載到自己的vendor目錄下。在使用包時,會先從當(dāng)前項目下的vendor目錄查找,然后再從GOPATH中查找,都沒有找到最后才在GOROOT中查找(依賴尋址方式:vendor -> GOPATH)

缺點:

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

Go Module模式

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

通過go.mod文件管理依賴的版本

通過go get/go mod指令工具管理依賴包

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

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

主要改動:

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

依賴管理三要素

  • 配置文件 描述依賴 go.mod
  • 中心倉庫管理依賴庫 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 的項目所必須的最重要的文件,它描述了當(dāng)前項目(也就是當(dāng)前模塊)的元信息,每一行都以一個動詞開頭,目前有以下 5 個動詞:

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

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

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,刪除無用的module
go mod vendor      將依賴復(fù)制到vendor下
go mod verify      校驗依賴
go mod why         解釋為什么需要依賴 

go get命令

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

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

快速使用go module

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

小結(jié)

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

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

相關(guān)文章

  • GO語言入門學(xué)習(xí)之基本數(shù)據(jù)類型字符串

    GO語言入門學(xué)習(xí)之基本數(shù)據(jù)類型字符串

    字符串在Go語言中以原生數(shù)據(jù)類型出現(xiàn),使用字符串就像使用其他原生數(shù)據(jù)類型(int、bool、float32、float64 等)一樣,下面這篇文章主要給大家介紹了關(guān)于GO語言入門學(xué)習(xí)之基本數(shù)據(jù)類型字符串的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 用gomock進行mock測試的方法示例

    用gomock進行mock測試的方法示例

    go-mock是專門為go語言開發(fā)的mock庫,該庫使用方式簡單,支持自動生成代碼,這篇文章主要介紹了用gomock進行mock測試的方法示例,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 深入了解Golang中的格式化輸出

    深入了解Golang中的格式化輸出

    fmt是Go語言中用于控制文本輸出的常用標(biāo)準(zhǔn)庫,文中將通過示例詳細(xì)講解一下Go語言中不同形式的格式化輸出,感興趣的小伙伴可以了解一下
    2022-11-11
  • 淺析Go語言容器之?dāng)?shù)組和切片的使用

    淺析Go語言容器之?dāng)?shù)組和切片的使用

    在?Java?的核心庫中,集合框架可謂鼎鼎大名:Array?、List、Set等等,隨便拎一個出來都值得開發(fā)者好好學(xué)習(xí)如何使用甚至是背后的設(shè)計源碼。雖然Go語言沒有如此豐富的容器類型,但也有一些基本的容器供開發(fā)者使用,接下來讓我們認(rèn)識一下這些容器類型吧
    2022-11-11
  • Go?tablewriter庫提升命令行輸出專業(yè)度實例詳解

    Go?tablewriter庫提升命令行輸出專業(yè)度實例詳解

    命令行工具大家都用過,如果是運維人員可能會編寫命令行工具來完成各種任務(wù),命令行輸出的美觀和易讀性往往容易被忽視,很爛的輸出會讓人感覺不專業(yè),本文將介紹Go語言中牛逼的實戰(zhàn)工具tablewriter庫,使你在命令行輸出中展現(xiàn)出專業(yè)的一面
    2023-11-11
  • golang如何使用gos7讀取S7200Smart數(shù)據(jù)

    golang如何使用gos7讀取S7200Smart數(shù)據(jù)

    文章介紹了如何使用Golang語言的Gos7工具庫讀取西門子S7200Smart系列PLC的數(shù)據(jù),通過指定數(shù)據(jù)塊號、起始字節(jié)偏移量和數(shù)據(jù)長度,可以精確讀取所需的數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • GO語言運行環(huán)境下載、安裝、配置圖文教程

    GO語言運行環(huán)境下載、安裝、配置圖文教程

    這篇文章主要介紹了GO語言運行環(huán)境下載、安裝、配置圖文教程,需要的朋友可以參考下
    2017-02-02
  • golang 之 wire 庫的使用小結(jié)

    golang 之 wire 庫的使用小結(jié)

    Wire是一個用于Go語言的編譯時依賴注入庫,通過代碼生成提高性能和可維護性,它支持編譯時依賴注入、類型安全、簡單易用等功能,文章通過代碼示例展示了如何使用Wire進行依賴注入,并探討了其優(yōu)點如解耦、可測試和維護性,感興趣的朋友跟隨小編一起看看吧
    2025-03-03
  • golang切片拷貝的實現(xiàn)

    golang切片拷貝的實現(xiàn)

    在Golang中,切片的淺拷貝只復(fù)制指向?qū)ο蟮闹羔?而深拷貝則復(fù)制數(shù)據(jù)本身,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • 并發(fā)安全本地化存儲go-cache讀寫鎖實現(xiàn)多協(xié)程并發(fā)訪問

    并發(fā)安全本地化存儲go-cache讀寫鎖實現(xiàn)多協(xié)程并發(fā)訪問

    這篇文章主要介紹了并發(fā)安全本地化存儲go-cache讀寫鎖實現(xiàn)多協(xié)程并發(fā)訪問,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10

最新評論

抚松县| 衢州市| 广汉市| 柳江县| 佛冈县| 黔南| 鄂尔多斯市| 延庆县| 佳木斯市| 都匀市| 同心县| 井研县| 昌宁县| 府谷县| 图木舒克市| 托克逊县| 嘉峪关市| 紫金县| 边坝县| 娄底市| 吉木乃县| 竹北市| 张家港市| 无极县| 朝阳区| 丰县| 崇州市| 武胜县| 平遥县| 崇义县| 罗田县| 南投市| 明光市| 同江市| 灵台县| 离岛区| 五华县| 嘉善县| 彰化市| 固原市| 朝阳县|