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

Go1.16 新特性:Go mod 的后悔藥,僅需這一招

開發(fā) 后端
前幾天 Go 官方正式發(fā)布了 1.16 版本。從這個版本起,環(huán)境變量 GO111MODULE 的默認值正式修改為 on。

[[382154]]

本文轉(zhuǎn)載自微信公眾號「腦子進煎魚了」,作者陳煎魚 。轉(zhuǎn)載本文請聯(lián)系腦子進煎魚了公眾號。  

大家好,我是正在學(xué)習(xí)煎魚的煎魚。

前幾天 Go 官方正式發(fā)布了 1.16 版本。從這個版本起,環(huán)境變量 GO111MODULE 的默認值正式修改為 on。

這也意味著 Go modules 將更進一步推進其業(yè)務(wù)覆蓋面,有新老項目共存的小伙伴建議手動將 GO111MODULE 調(diào)整為 auto。

Go1.16 針對 Go modules 放出了一個新特性,能夠讓維護第三方庫(需含 Go mod)的開發(fā)者擁有反復(fù)吃 “后悔藥” 的權(quán)力,可以提醒使用者已發(fā)布的 “臟” 版本存在問題及了解其原因。

這個新特性,對于許多維護和使用公共庫(開源、企業(yè)等)的小伙伴簡直是一個小福音,建議大家都應(yīng)該要了解這個知識點。

在接下來文章中將進行詳細說明和介紹。

后悔藥:Go mod retract

Go1.16 起可以在 go.mod 文件中使用 retract 指令來聲明該第三方模塊的某些發(fā)行版本不能被其他模塊使用。

在使用場景上:在發(fā)現(xiàn)嚴重問題或無意發(fā)布某些版本后,模塊的維護作者可以撤回該版本,支持撤回單個或多個版本。

以前沒有辦法解決,因此一旦出現(xiàn)就非常麻煩。對應(yīng)兩者的操作如下:

  • 維護者:
    • 刪除有問題版本的 tag。
    • 重新打一個新版本的 tag。
  • 使用者:
    • 發(fā)現(xiàn)有問題的版本 tag 丟失,需手動介入。
    • 不知道有問題,由于其他庫依賴,因此被動升級而踩坑。

因此在本次 Go1.16 發(fā)布后,就擁有了一個半止損的新手段了,也可以作為 Go mod 自動更新的大坑的補全辦法之一。

實戰(zhàn)演練

為了方便演示,首先創(chuàng)建一個 Demo 項目(github.com/eddycjy/go-retract-demo),其含有一個基礎(chǔ)方法:

  1. package go_retract_demo 
  2.  
  3. func HelloWorld() string { 
  4.  return "001:腦子進煎魚了!" 

另外有一個應(yīng)用工程依賴了該第三方庫,代碼如下:

  1. func main() { 
  2.   // import demo "github.com/eddycjy/go-retract-demo" 
  3.  s := demo.HelloWorld() 
  4.  fmt.Println(s) 

對應(yīng)的 go.mod 文件如下:

  1. module github.com/eddycjy/awesomeProject 
  2.  
  3. go 1.16 
  4.  
  5. require github.com/eddycjy/go-retract-demo v0.0.1 

retract 特性演示

但隨著時間不斷推移,第三方開源庫 eddycjy/go-retract-demo 即將迭代到 v0.3.0 時,發(fā)現(xiàn)以往的 v0.2.0 是有 BUG 的。

需要緊急的在v0.3.0 版本把這個 BUG 修復(fù)并提醒出去。此時可以在 go.mod 文件中寫入 retract 指令:

  1. module github.com/eddycjy/go-retract-demo 
  2.  
  3. go 1.16 
  4.  
  5. // 因為煎魚不小心敲錯了... 
  6. retract v0.2.0 

指令上面為撤回的原因,后面是具體的版本。如果涉及多版本,可以如下編寫:

  1. retract ( 
  2.   v0.1.0 
  3.   v0.2.0 

retract 特性效果

成功發(fā)布最新版本 v0.3.0 版本并指定 retract 后。所有引用了該庫的工程應(yīng)用,執(zhí)行 go list 就可以看到如下提醒:

  1. $ go1.16 list -m -u all 
  2. xxx/eddycjy/awesomeProject 
  3. xxx/eddycjy/go-retract-demo v0.2.0 (retracted) [v0.3.0] 

結(jié)合該命令,我們?nèi)粘J褂玫?IDE(例如:GoLand),其在保存時是會默認執(zhí)行 go list 命令的。在后續(xù) IDE 支持后,就可以在編碼時就快速發(fā)現(xiàn)有問題的版本和提示。

在手動執(zhí)行 go get 時也會出現(xiàn) warning 提示,會把 go.mod 文件上的原因注釋顯示出來:

  1. $ go1.16 get github.com/eddycjy/go-retract-demo@v0.2.0 
  2. go: warning: github.com/eddycjy/go-retract-demo@v0.2.0: retracted by module author: 因為煎魚不小心敲錯了... 
  3. go: to switch to the latest unretracted version, run: 
  4.  go get github.com/eddycjy/go-retract-demo@latest 

這樣就能看到是哪個模塊依賴,因為什么原因要求撤回了,非常直觀。

總結(jié)

以往在出問題后每個個體需要跑去問維護者或者看 GitHub Commits,那樣總歸非常麻煩,很可能一來一回半個鐘就沒了。

新特性給予了 Go modules 軟撤回版本的一個方法,能夠把問題更直觀的反饋到開發(fā)者的手中,再結(jié)合日常開發(fā)工具的話更是美哉。

但這個特性的完全應(yīng)用目前也是有一定的阻礙的:

  • 國內(nèi)模塊代理:需要國內(nèi)的模塊代理也支持 retract ,否則即使你更新了版本也沒有提示處理。
  • IDE:IDE 針對 retract 做一些支持,例如:文字顏色標紅、黃等,能夠便于開發(fā)者更好的識別。

你對 Go modules 的 retract 特性怎么看,歡迎一起留言討論!

 

責(zé)任編輯:武曉燕 來源: 腦子進煎魚了
相關(guān)推薦

2021-02-02 09:10:12

Go語言二進制

2022-05-30 08:53:47

PycharmPython

2020-04-27 09:21:25

Android谷歌功能

2021-06-01 19:11:20

Go函數(shù)NotifyConte

2018-12-19 13:33:24

Safari瀏覽器搜索

2020-07-08 11:07:32

Git撤銷代碼

2009-11-13 11:45:06

木馬病毒Windows

2025-04-15 08:25:00

網(wǎng)絡(luò)分層網(wǎng)絡(luò)分層模型網(wǎng)絡(luò)

2014-02-09 09:47:44

Windows 8.1Windows 8.1

2022-01-19 18:02:42

chrome插件使用者

2016-10-24 22:41:06

大數(shù)據(jù)Google

2015-01-12 11:07:22

2021-07-12 05:31:15

微信微信電腦版掃碼登錄

2019-01-28 05:48:15

5G無線網(wǎng)絡(luò)運營商

2017-02-06 19:17:28

云主機IT運維磁盤

2019-01-02 08:17:20

微信功能系統(tǒng)

2021-09-05 18:25:30

Go命令倉庫

2021-03-19 08:16:03

數(shù)據(jù)庫

2020-11-02 08:21:50

Git辦法代碼

2024-01-22 00:30:00

Go編程Go 1.22
點贊
收藏

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