偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

搞清楚 Go Mod的版本和偽版本,下次別亂用了

開發(fā) 前端
Go Module 告訴我某個包在原來的版本的模塊里,不在你聲明的版本里… 。后來花了挺長時間對比才發(fā)現(xiàn)原來使用的版本并沒有合并到主干分支上。

今天再跟大家嘮一下 Go Module 中軟件包的版本和偽版本的內(nèi)容,因為這是一個理想很豐滿、現(xiàn)實很骨感的故事。

Module 的版本

關(guān)于 Go Module 依賴包的軟件版本,這塊知識就很中規(guī)中矩啦,大部分資料里也都有提及。

Go Modules模塊的版本格式為“主版本號.次版本號.修訂號”,版本號的遞增規(guī)則如下:

v1.26.0
| | |_ _ 修訂號
| |
| |_ _ _ _ 次版本號
|
|_ _ _ _ _ 主版本號
  • 主版本號:當(dāng)你做了不兼容的更新時變更主版本號。
  • 次版本號:當(dāng)你做了向下兼容的功能性更新時更改次版本號。
  • 修訂號:當(dāng)你做了向下兼容的問題補丁修正時更改修訂號。

不過當(dāng)你在真正在項目里使用 Go Module 管理項目依賴的時候,尤其是你們公司內(nèi)部的私有依賴模式時,你就會發(fā)現(xiàn)事情完全沒有這么簡單。

多數(shù)情況下,go.mod 文件里會有一堆依賴他們的版本會是醬嬸兒的:

golang.org/x/lint v0.0.0-20200302205851-738671d3881b 
...
code.xxx.com/libs/xyz v1.0.10-0.20220805095508-6c1f3628ef7a

這個就是我們接下來要說的偽版本了。

Module 的偽版本

為什么mod 文件里有這么多偽版本 (pseudo-version) 呢,這里先跟大家插播一個小知識,大家在看技術(shù)文檔的時候經(jīng)常會有偽類,偽代碼,偽版本這樣的術(shù)語,他們基本上都是在原來的詞根上加一個Pseudo前綴,代表他們不是正式的類、代碼、版本?(偽類好像不是那么回事,前端知識已經(jīng)忘光了),還有那個單詞開頭的P不發(fā)音… 不過好像咱們平時交流的時候念錯了也沒事,畢竟不少程序員哥哥,都把 alter 念成了alert,也不影響我們改MySQL的表。

Go Module 生成的偽版本主要有兩種,其一是這種v0.0.0開頭的:

golang.org/x/lint v0.0.0-20200302205851-738671d3881b

這種是因為依賴模塊的代碼倉庫上不存在任何標(biāo)簽,所以go get? 默認(rèn)拉取的是主干分支最新一次commit對應(yīng)版本的代碼,并且在go.mod文件里為模塊分配格式為 v0.0.0-主干分支最新一次commit的時間-commit哈希 這樣的一個虛擬版本。

第二種是這種非  v0.0.0  開頭的偽版本,比如:

code.xxx.com/libs/xyz v1.0.10-0.20220805095508-6c1f3628ef7a

這種一般是作為依賴包的項目本身代碼倉庫里有打標(biāo)簽發(fā)布版本,可是后續(xù)我們需要更新包,在測試階段的時候在項目使用go get 模塊名@CommitHash 獲取還未正式發(fā)布的內(nèi)容:

go get code.xxx.com/libs/xyz@6c1f3628ef7a

這個時候 Go Module 就會給我們在依賴已發(fā)布的版本上進行累加,然后生成偽版本,比如上面那個例子,模塊的偽版本以v1.0.10?開頭就代表模塊上一次發(fā)布的版本是v1.0.9?,你打開模塊所在的代碼倉庫看一下,一定會有一個v1.0.9的標(biāo)簽在那。

這里再放一個偽版本各部分的說明圖給大家,方便理解記憶。

圖片

gomod 的偽版本規(guī)則

關(guān)于模塊的偽版本,雖然我們掌握了它的生成規(guī)則,但使用的時候一定不要自己在 go.mod 文件里去編輯,而是使用上面舉例的go get 命令,讓 Go Module 自己生成模塊的偽版本。

偽版本的亂象

針對在測試、開發(fā)階段的依賴模塊,因為不能在主干分支上打標(biāo)簽,我看到網(wǎng)上不少資料推薦以這種方式設(shè)置版本:

// 在測試分支上打標(biāo)簽
v1.2.30-test
// 在仿真分支上打標(biāo)簽
v1.2.30-pre

等模塊測試通過,就可以在軟件包的master?分支打出v1.2.30?標(biāo)簽,將引用模塊的項目中g(shù)o.mod文件里的依賴聲明,更改成正式版本即可。

不過實際我看下來,更多的是使用偽版本的居多,而且很多線上項目在 go.mod 文件里直接就是引用的這些偽版本的模塊。

這些問題咋一看起來沒有什么事兒,但是我前段時間改了個被降本提效的團隊的項目,里面就很多這種使用依賴的偽版本,更坑的是他們沒把這個版本里的代碼合并到主干,導(dǎo)致我更新了一個新版本,測試的時候,報了一個類似這樣的錯。

package provided [] but not at required version

Go Module 告訴我某個包在原來的版本的模塊里,不在你聲明的版本里… 。后來花了挺長時間對比才發(fā)現(xiàn)原來使用的版本并沒有合并到主干分支上。

這里再次提醒一下大家,項目使用的內(nèi)部依賴包,上線前一定要確定使用這些軟件包在主干上打的標(biāo)簽版本,為什么再次強調(diào)一定要在主干分支上打最終的正式標(biāo)簽?zāi)?.. 因為如果規(guī)范不明確,真有大哥從feature分支上打正式標(biāo)簽...

總結(jié)

今天給大家介紹了 Go Module 關(guān)于模塊版本管理的幾個小知識,也說了下在開發(fā)模塊時的一些亂象,咱們最好還是遵守上面說的,測試階段在測試分支打標(biāo)簽,發(fā)布的時候一定要合并到主干上打正式標(biāo)簽,項目不要還依賴著模塊的偽版本呢就上線了,發(fā)布前檢查一下 go.mod 及時更改過來,就不會像我這大冤種,天天給前人填坑啦。

責(zé)任編輯:武曉燕 來源: 網(wǎng)管叨bi叨
相關(guān)推薦

2011-06-22 09:37:03

桌面虛擬化存儲

2018-06-26 14:42:10

StringJava數(shù)據(jù)

2020-11-16 08:37:16

MariaDB性能優(yōu)化

2020-12-16 11:09:27

JavaScript語言開發(fā)

2020-12-31 07:57:25

JVM操作代碼

2021-09-01 09:32:40

工具

2017-08-15 08:27:48

云備份問題恢復(fù)

2015-10-12 10:01:26

AndroidWindows應(yīng)用Windows 10

2021-01-19 06:43:10

Netty框架網(wǎng)絡(luò)技術(shù)

2018-06-20 10:43:58

云端霧端霧計算

2011-03-07 17:44:59

中小企業(yè)實施虛擬化

2022-11-16 14:02:44

2020-04-28 17:26:04

監(jiān)督學(xué)習(xí)無監(jiān)督學(xué)習(xí)機器學(xué)習(xí)

2023-02-17 14:40:08

MySQLSQL優(yōu)化

2021-09-21 16:18:07

手機電池快充

2022-10-24 00:33:59

MySQL全局鎖行級鎖

2020-04-11 11:21:22

留存分析模型分析

2025-06-24 09:16:48

2023-06-26 11:59:52

標(biāo)簽質(zhì)量梳理

2019-07-26 15:49:25

代碼開發(fā)工具
點贊
收藏

51CTO技術(shù)棧公眾號