自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開(kāi)發(fā) 前端
Go Module 告訴我某個(gè)包在原來(lái)的版本的模塊里,不在你聲明的版本里… 。后來(lái)花了挺長(zhǎng)時(shí)間對(duì)比才發(fā)現(xiàn)原來(lái)使用的版本并沒(méi)有合并到主干分支上。

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

Module 的版本

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

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

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

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

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

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

這個(gè)就是我們接下來(lái)要說(shuō)的偽版本了。

Module 的偽版本

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

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

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

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

第二種是這種非  v0.0.0  開(kāi)頭的偽版本,比如:

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

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

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

這個(gè)時(shí)候 Go Module 就會(huì)給我們?cè)谝蕾?lài)已發(fā)布的版本上進(jìn)行累加,然后生成偽版本,比如上面那個(gè)例子,模塊的偽版本以v1.0.10?開(kāi)頭就代表模塊上一次發(fā)布的版本是v1.0.9?,你打開(kāi)模塊所在的代碼倉(cāng)庫(kù)看一下,一定會(huì)有一個(gè)v1.0.9的標(biāo)簽在那。

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

圖片

gomod 的偽版本規(guī)則

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

偽版本的亂象

針對(duì)在測(cè)試、開(kāi)發(fā)階段的依賴(lài)模塊,因?yàn)椴荒茉谥鞲煞种洗驑?biāo)簽,我看到網(wǎng)上不少資料推薦以這種方式設(shè)置版本:

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

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

不過(guò)實(shí)際我看下來(lái),更多的是使用偽版本的居多,而且很多線上項(xiàng)目在 go.mod 文件里直接就是引用的這些偽版本的模塊。

這些問(wèn)題咋一看起來(lái)沒(méi)有什么事兒,但是我前段時(shí)間改了個(gè)被降本提效的團(tuán)隊(duì)的項(xiàng)目,里面就很多這種使用依賴(lài)的偽版本,更坑的是他們沒(méi)把這個(gè)版本里的代碼合并到主干,導(dǎo)致我更新了一個(gè)新版本,測(cè)試的時(shí)候,報(bào)了一個(gè)類(lèi)似這樣的錯(cuò)。

package provided [] but not at required version

Go Module 告訴我某個(gè)包在原來(lái)的版本的模塊里,不在你聲明的版本里… 。后來(lái)花了挺長(zhǎng)時(shí)間對(duì)比才發(fā)現(xiàn)原來(lái)使用的版本并沒(méi)有合并到主干分支上。

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

總結(jié)

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

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

2011-06-22 09:37:03

桌面虛擬化存儲(chǔ)

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語(yǔ)言開(kāi)發(fā)

2020-12-31 07:57:25

JVM操作代碼

2021-09-01 09:32:40

工具

2017-08-15 08:27:48

云備份問(wèn)題恢復(fù)

2015-10-12 10:01:26

AndroidWindows應(yīng)用Windows 10

2018-06-20 10:43:58

云端霧端霧計(jì)算

2021-01-19 06:43:10

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

2011-03-07 17:44:59

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

2022-11-16 14:02:44

2020-04-28 17:26:04

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

2023-02-17 14:40:08

MySQLSQL優(yōu)化

2022-10-24 00:33:59

MySQL全局鎖行級(jí)鎖

2021-09-21 16:18:07

手機(jī)電池快充

2020-04-11 11:21:22

留存分析模型分析

2023-06-26 11:59:52

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

2019-07-26 15:49:25

代碼開(kāi)發(fā)工具

2021-05-06 10:25:37

蘋(píng)果手機(jī)二手
點(diǎn)贊
收藏

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