国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Go mod 七宗罪,你知道幾宗?

開發(fā) 開發(fā)工具
Go list,Go test,Go build,所有命令都會去拉取依賴,有些庫是用被墻的服務(wù)做了重定向,只是執(zhí)行一下 go test,然后就被卡一年是家常便飯。

 [[384341]]

本文轉(zhuǎn)載自微信公眾號「碼農(nóng)桃花源」,作者曹春暉。轉(zhuǎn)載本文請聯(lián)系碼農(nóng)桃花源公眾號。    

go mod 是 rsc 主導(dǎo)設(shè)計的 Go 版本管理工具,借鑒了 Google 內(nèi)部的高大上版本管理方式,摒棄了開源社區(qū)的版本管理成功經(jīng)驗,借助 MVS 算法,希望能夠走出一條不一樣的路,然而從發(fā)布以來給廣大 Gopher 帶來了各種各樣的麻煩。本文簡單列舉一部分罪狀,Google 的并不一定總是世界的。

當然,隨著 Go 1.16 的發(fā)布,其中有些罪證可能已經(jīng)不成立了,讀者可以自行甄別。

Go 命令的副作用

Go list,Go test,Go build,所有命令都會去拉取依賴,有些庫是用被墻的服務(wù)做了重定向,只是執(zhí)行一下 go test,然后就被卡一年是家常便飯。

按照 "By design" 的說法,Google 內(nèi)部的依賴庫版本都會盡量使用能夠兼容的最新版本。對于墻內(nèi)的我們來說,我不管執(zhí)行什么 Go 命令怎么都卡。逐漸患上 go test PTSD。

解法:配置 GOPROXY 代理,雖然拉取依賴還是慢。

形同虛設(shè)的 semver 規(guī)范

社區(qū)里不遵守 semver 規(guī)范的庫很多,有的開源庫在 1.7.4 ~ 1.7.5 中進行了 breaking change,而按照 semver 的定義,這是不應(yīng)該發(fā)生的。go mod 過度高估了開源社區(qū)的節(jié)操。

一開始,我們以為這只是社區(qū)的節(jié)操問題,直到我們碰到了 gRPC。

好樣的哦,Google 工程師。

無法應(yīng)對刪庫

leftpad 悲劇重演

js 社區(qū)使用集中式的 npm 來管理依賴,在幾年前發(fā)生過一次因為作者刪庫,導(dǎo)致幾乎所有互聯(lián)網(wǎng)巨頭的前端項目全部 build 失敗的悲劇。同時 js 社區(qū)也進行了一些反思 how one programmer broke the internet[1],have we forgotten how to program[2]。

npm 好歹還是集中式的版本管理方式,Go 號稱分布式,但大多 Go 的依賴庫都是存在 Github 上,如果 Github 上的原作者刪除了該庫,那么也會導(dǎo)致大多數(shù)的依賴用戶 build 失敗。

即使看起來我們可以靠 go.mod 和 go.sum 來實現(xiàn) reproducible build,實際的情況是,像 k8s 這樣的項目,依然會把龐大的依賴庫放在自己 repo 的 vendor 里。

在筆者從 dd 離職時,也曾經(jīng)不小心刪除過一個認為應(yīng)該沒有人再依賴的個人庫,當時給前同事們也造成了一些麻煩。

Github release/tag 水土不服

在 Github 上發(fā)布 lib 的 release,或者給某個 commit 打 tag 之后,我們依然可以對這些 tag 和 release 進行編輯:

我們經(jīng)常看到,有些庫的作者在發(fā)布一個 release 之后,又刪除了這個 release,或?qū)@個 release 進行了編輯。對于用戶來說,這樣就會依賴一個已經(jīng)“消失”了的版本,在不存儲 vendor 的情況下,reproducible build 淪為笑談。

goproxy 的實現(xiàn)并不統(tǒng)一

不知道是否是因為 goproxy 并無規(guī)范,在使用不同的代理幫助我們加速下載依賴時,會出現(xiàn)各種不同的錯誤。

例如作者 A 開發(fā)的 goproxy,在某個庫不存在時,會返回 404。而作者 B 開發(fā)的 goproxy,在某個庫不存在時,會返回 500。著實令人困惑。

而 goproxy 本身的實現(xiàn)基本都是惰性下載,所以新發(fā)布的庫,我們要走 goproxy 來測試時,就需要手動 go get 觸發(fā)。而大多 goproxy 的實現(xiàn)并沒有查詢功能,goproxy 服務(wù)內(nèi)部到底什么時候同步好了,可以 go get 了,還是 go get 的過程中發(fā)生失敗了。作為用戶是不可查的。

go get 到的 lib 版本在 go build 時被修改

在 go get 時,可以 go get lib@ver 來獲取指定版本的依賴,但是在 go build 時可能發(fā)現(xiàn)又被修改成了別的版本(比如被升級了),非常反直覺。

我們想要鎖定具體的版本,只能使用 replace。

版本信息擴散

由于 go mod 的設(shè)計,版本信息被包含在了 import 路徑中。當依賴庫從 v1 升級至 v2 時,幾乎一定意味著我們代碼中大量的 import 路徑需要修改。

修改不兼容的 api 就挺累的了。

go.sum 合并沖突

因為上面講到的一系列問題,go.sum 在多人維護的大項目上,經(jīng)常會發(fā)生變動,也就經(jīng)常會有沖突。對于中心化版本管理系統(tǒng)來說,這個問題根本就不存在。對于 go mod 來說,go.sum 合并本來是個純追加邏輯。

但這些沖突還是會浪費我們的時間。

[1]how one programmer broke the internet: https://qz.com/646467/how-one-programmer-broke-the-internet-by-deleting-a-tiny-piece-of-code/

[2]have we forgotten how to program: https://www.davidhaney.io/npm-left-pad-have-we-forgotten-how-to-program/

 

責任編輯:武曉燕 來源: 碼農(nóng)桃花源
相關(guān)推薦

2023-05-08 10:54:39

IT管理CIO

2024-06-19 19:28:51

2011-02-21 09:04:25

2018-02-05 23:14:35

光纖網(wǎng)絡(luò)光纖施工

2013-05-10 10:49:53

2014-01-13 09:35:13

創(chuàng)業(yè)企業(yè)

2015-09-15 13:22:08

數(shù)據(jù)分析七宗罪

2013-01-17 17:14:52

Objective-C

2015-09-06 11:25:57

七宗罪失敗案例

2017-01-09 15:25:49

物聯(lián)網(wǎng)策略設(shè)計

2010-08-18 10:05:27

IE7IE6

2011-02-23 10:51:36

Chrome

2017-08-02 16:24:04

2012-04-04 22:15:19

移動游戲

2021-03-03 14:08:48

自動化高管IT投資

2012-09-07 14:41:26

2023-10-17 20:28:13

軟件開發(fā)代碼

2019-04-15 09:00:00

SQLOracle數(shù)據(jù)庫

2015-07-16 09:14:50

數(shù)據(jù)中心數(shù)據(jù)中心效率

2016-12-08 13:12:36

數(shù)據(jù)中心綠色認證
點贊
收藏

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

亚洲精品永久免费| 97在线观视频免费观看| 国产精品免费不| 这里只有精品视频| 日本精品不卡| 国产一区二区三区在线观看视频 | 日韩电影在线一区| 国产一区二区免费电影| 午夜天堂精品久久久久| 91视频88av| 红桃视频国产精品| 国产视色精品亚洲一区二区| 尹人成人综合网| 国产在线精品日韩| 久久精品免费| 亚洲欧美日韩不卡一区二区三区| 美洲天堂一区二卡三卡四卡视频| 成人手机视频在线| 日本在线播放一区| 国产亚洲成人一区| 婷婷久久五月天| 狠狠色狠狠色综合系列| a级黄色小视频| 国产精品免费丝袜| av在线天天| 色婷婷综合久久久久中文一区二区 | 日韩福利一区| 久久精品国产一区| 红杏aⅴ成人免费视频| 奇米四色中文综合久久| 国产精品成久久久久三级| av黄色免费| 欧美视频在线观看免费| 欧美黄色小说| 亚洲精品一区二区三区99 | 色综合久久久久久久久久久| av在线播放av| 亚洲а∨天堂久久精品9966 | 六月婷婷在线视频| 国产精品久久久久久久久免费丝袜| 手机看片1024久久| 日韩网站在线看片你懂的| 中文不卡1区2区3区| 欧美激情喷水视频| 最新国产精品久久久| 亚洲国产精品一区二区第一页 | 亚洲午夜精品一区二区三区| 99久久免费精品| 国产性一级片| 欧美一区二区视频在线观看| 综合久草视频| 99re视频在线播放| 国产黑丝在线一区二区三区| 成人亚洲一区二区三区| 欧美一区二区三区系列电影| 国产一区二区三区免费在线| 亚洲aⅴ男人的天堂在线观看| 久久国产精品久久w女人spa| 免费国产成人av| 精品动漫一区| gogogo免费高清日本写真| 亚洲欧美偷拍卡通变态| av在线网址观看| 久久久爽爽爽美女图片| 日韩电影在线免费观看| 日本免费视频www| 亚洲欧美日韩一区二区在线 | 国产午夜精品麻豆| 欧美日中文字幕| 性刺激综合网| 亚洲资源在线观看| 97成人资源| 91精品国产综合久久香蕉| 国产在线国偷精品免费看| 中文字幕视频在线观看| 久久亚洲电影天堂| 久久婷婷一区| av女同在线| 久久精品国产亚洲7777| 国产日韩欧美三区| 毛片手机在线观看| y97精品国产97久久久久久| 在线综合亚洲| 中文在线网在线中文| 精品中文字幕视频| 国产一区美女在线| freemovies性欧美| 国产aaa精品| 日韩在线麻豆| 一级做a爰片久久| 色婷婷综合在线| 激情小说一区| 久草免费福利在线| 欧美大胆人体bbbb| 伊人久久大香线蕉综合热线| 白浆爆出在线观看| 久久99国产精品久久久久久久久| 日本欧美一区二区| 麻豆视频在线播放| 97人人模人人爽视频一区二区| 亚洲美女屁股眼交3| 91精品导航| 成人观看免费完整观看| 亚洲三级av在线| 热久久免费视频| 老司机免费在线视频| 肥熟一91porny丨九色丨| 亚洲第一主播视频| 亚洲第一论坛sis| 中文av一区二区三区| 久久国产精品影视| 欧美日韩看看2015永久免费| 精品视频在线观看一区二区| 日韩欧美亚洲国产精品字幕久久久 | 美女日批免费视频| 亚洲人免费视频| 麻豆精品新av中文字幕| 午夜av在线播放| 天天综合狠狠精品| 精品1区2区在线观看| 三级久久三级久久| 波多野结衣乳巨码无在线观看| 青青成人在线| 精品国产一区二区三区av性色| 国产亚洲欧洲| av软件在线观看| 一本久道久久综合| 亚洲色图25p| 91在线免费视频观看| 精品国产亚洲一区二区在线观看| 日韩av高清在线看片| 欧美成人第一页| 国产精品毛片久久久久久久| 97久久综合区小说区图片区| 色婷婷亚洲十月十月色天| 国产91精品青草社区| 夜夜嗨av一区二区三区网页| 日本大胆欧美| seseavlu视频在线| 色一情一区二区三区四区| 日韩成人在线视频网站| 成人动漫精品一区二区| 成人亚洲精品| 99热在线免费播放| 91精品久久久久久综合乱菊 | 久草在线看片| 国产在线视频一区| 欧美日本一区二区三区四区| 日本成人超碰在线观看| 黄色综合网址| 最近中文字幕一区二区| 日本免费久久高清视频| 91久久精品一区二区| 首页综合国产亚洲丝袜| 欧美va在线观看| 熟妇人妻va精品中文字幕| 欧美一级淫片aaaaaaa视频| 午夜亚洲福利老司机| 极品av少妇一区二区| www成人免费观看| 成人在线观看a| 国产有码在线一区二区视频| 91精品国产色综合久久不卡电影| 国产成人日日夜夜| 青青草这里只有精品| 精品av中文字幕在线毛片| 一区高清视频| 欧美激情久久久久| 91福利小视频| 国产成人精品亚洲777人妖| 日本韩国欧美超级黄在线观看| 国产色在线 com| 男女激情免费视频| 国产精品久久久久久久久男| 欧美成人a在线| 国产精品你懂的在线| 国内精品亚洲| 日韩免费大片| 国产黄色片在线观看| 91免费黄视频| 成人夜晚看av| 一区二区国产精品视频| 亚洲一区二区视频在线| 三级欧美韩日大片在线看| 国产精品乱战久久久| 国产网站在线免费观看| 美女黄色片视频| 免费99视频| 久久久欧美一区二区| 欧美精三区欧美精三区| 久久免费看少妇高潮| 激情久久久久| 神马午夜在线视频| 小香蕉视频在线| 可以看毛片的网址| 超碰97在线播放| 97超级碰在线看视频免费在线看| 日韩一区二区精品葵司在线 | 精品欧美一区二区三区精品久久| 国产欧美一区二区精品性色|