精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Go 語言設計失誤,缺乏遠見?

開發 后端
為什么 Go 語言這么久都沒有泛型,是不是 Go 官方不夠 “聰明”,抄作業都不會抄。這顯然是不對的。

[[429956]]

本文轉載自微信公眾號「腦子進煎魚了」,作者陳煎魚 。轉載本文請聯系腦子進煎魚了公眾號。

大家好,我是煎魚。

前段時間我有一個朋友在某站點上摸魚時,給我甩來一個主題為《golang 設計者是如何償還技術債的》鏈接。

說是讓我學習、圍觀一下社區觀點,早日好修成正果,本魚表示滿臉問號。

原回答如下圖:

主要是以極短的話語表述 Go 語言的 “泛型、異常、channel、annotation、模塊依賴” 的設計是失誤的。

說是沒有向各種編程語言的 “最佳實踐” 各取所需。

那些故事

剛好煎魚也入門 Go 沒幾天,偶爾翻過 issues 和 proposal,看了一點點歷史事件。

圖來自 Introduction to Golang

也從我的觀點來圍觀一下 Go 官方這些年為特性掙扎過的那些事。

涉及:

  • 泛型。
  • 錯誤處理。
  • 依賴管理。
  • 注解。

泛型

為什么 Go 語言這么久都沒有泛型,是不是 Go 官方不夠 “聰明”,抄作業都不會抄。這顯然是不對的。

有如下幾點原因:

  • 泛型本質上并不是絕對的必需品。
  • 泛型不是 Go 語言的早期目標。
  • 其他 feature 更重要,把精力放在這些上面,Go 團隊人力很有限的。

歷史嘗試

在以往的嘗試中,Go 團隊有人進行過不少的泛型 proposal 試驗。基本時間線(via @changkun)如下:

簡述 時間 作者
Type Functions 2010年 Ian Lance Taylor
Generalized Types 2011年 Ian Lance Taylor
Generalized Types v2 2013年 Ian Lance Taylor
Type Parameters 2013年 Ian Lance Taylor
go:generate 2014年 Rob Pike
First Class Types 2015年 Bryan C.Mills
Contracts 2018年 Ian Lance Taylor, Robert Griesemer
Contracts 2019年 Ian Lance Taylor, Robert Griesemer
Redundancy in Contracts(2019)'s Design 2019年 Ian Lance Taylor, Robert Griesemer
Constrained Type Parameters(2020, v1) 2020年 Ian Lance Taylor, Robert Griesemer
Constrained Type Parameters(2020, v2) 2020年 Ian Lance Taylor, Robert Griesemer
Constrained Type Parameters(2020, v3) 2020年 Ian Lance Taylor, Robert Griesemer

我們觀察一下,10 年過去了,Ian Lance Taylor 依然在開展泛型提案,持續地在思考著 Go 泛型。

堅持思考,這一點值得我們學習。

下一步計劃

在 2021 年尾巴的我們,明年(2022年) Go1.18 左右就可以見到 Go 泛型,基本跑不了。

在出來前可以看看《Go 1.17 支持泛型了?具體怎么用》,可以作為玩具用了。

接下來可以預見泛型出來后,一堆工具庫和數據結構很大可能會被逐步改寫,像是《Go 提案:增加泛型版 slices 和 maps 新包》,早已摩拳擦掌。

屆時 Go 源碼類別的書的部分內容也會失時效,需要關注 Go 版本的時效性。

錯誤處理

在日常工程中,我們寫的、看到最多的可能就是這一段標志性 Go 代碼:

  1. func main() { 
  2.  x, err := foo() 
  3.  if err != nil { 
  4.    // handle error 
  5.  } 
  6.  y, err := foo() 
  7.  if err != nil { 
  8.    // handle error 
  9.  } 
  10.  z, err := foo() 
  11.  if err != nil { 
  12.    // handle error 
  13.  } 
  14.  s, err := foo() 
  15.  if err != nil { 
  16.    // handle error 
  17.  } 

這是在業內被吐槽的最多的,甚至都可以用來作為 Gopher 的互認。

設計方向

那 Go 是瞎設計的嗎,就粗制濫造,搞個錯誤 err 的返回約定慣例。像是:

  1. func foo() err { 
  2.     return nil 

其實并不是,Go 團隊在設計上有意識地選擇了顯式的設計方向,如下:

  • 使用顯式錯誤結果。
  • 使用顯式錯誤檢查。

這和其他語言不一樣 ,是由于 Go 團隊也認識到了異常處理的不可見錯誤檢查所帶來的問題。

設計草案有一部分是受到了這些問題的啟發。如下:

目前 Go 官方也沒有打算去掉 “顯式” 這一做法,新版 Go2 錯誤處理的核心目標是:“錯誤檢查更加輕便,減少專門用于錯誤檢查的 Go 程序代碼的數量和所花費的時間。”。

從 Go2 的趨勢來看,主要是增加關鍵字和修飾來解決這個問題,相當于是堆積木了,而不是直接把他干掉的。

這在 Go 核心團隊內是非常明確的。

依賴管理

Go 語言在一開始是完全基于 GOPATH 作為依賴管理的模式,當時也鬧了不少的爭議出來。有以下核心問題:

依賴要手動拉取和下載,沒有強版本化的概念,開發者很難受(例如:不兼容升級、要拉取同一份)。

依賴和工程代碼必須在 GOPATH 下才能運行,不能任意擺放。

所以在 Go1.0~Go1.11 中,各路神仙發招,社區出現了各種諸如 dep、glide、godep 等依賴包管理工具。

時間線

后續 Go 團隊在 Russ Cox 的強勢推進下,力排眾議,推動 Go modules 的發展:

時間線如下:

  • Go1.11 起開始推進 Go modules(前身 vgo)。
  • Go1.13 起不再推薦使用 GOPATH 的使用模式。
  • Go1.14 表示已經準備好,可以用在生產上(ready for production)了。

為什么這么晚

為什么 Go modules 這么晚才誕生,這是不是就是 Go 團隊的設計失誤呢?

我認為,是也不是。

Go 的誕生一開始是為了解決 Google 幾位大佬自己的痛點。

在 Google 的依賴管理上,本身是大倉庫(Monorepo)的模式,企業內部有自己一整套工具和流程,設計之初沒有這塊的強訴求。

如下:

圖來自 Mono Repo vs Multi Repo

有興趣的讀者詳細可閱讀《Why Google Stores Billions of Lines of Code in a Single Repository》,

Go 在社區開源后,大規模使用后這個問題就爆發了,社區自行釋出了方案。可惜,五花八門,也都沒有解決好。官方隊伍就自己上手了。

要知道,沒有技術方案是完美的。Go modules 也被不少人所吐槽,存在爭議。

注解

Go 開發者中有大部分同學都有其他語言的使用經驗。在其他語言中,注解是一個強大的工具,沒得用會很不習慣。

圖片來自網絡

甚至有聽過沒有注解,就自嘲不會 “寫” 代碼了,所以一上來就找 Go 語言的注解怎么用了。

一些疑惑

我有一個朋友,經常會聽到如下疑惑,甚至無奈的發問:

“怎么樣在函數前聲明,直接開啟事務?”

"為什么 Java 可以完美注解,Go 就不行,難以理解,我無法接受..."

“那 Go 支持什么程度的注解?”

Go 的 “注解” 支撐的非常有限,基本都是 //go build、go:generate 這類輔助,達不到標準的裝飾器的作用。

為什么不支持

沒有全面的支持注解來做裝飾器,顯然不算 Go 的設計失誤,這是刻意為之,這是與錯誤處理的設計理念相關聯。

Go issues 上有人提過類似的提案:

Go Contributor @ianlancetaylor 給出了明確的答復,Go在設計上更傾向于明確的、顯式的編程風格。

優缺點如下:

  • 優勢:不知道 Go 能從添加裝飾器中得到什么好處,沒能在 issues 上明確論證。
  • 缺點:是明確的,會存在意外設置的情況。

因如下原因,沒有接受注解:

  • 對比現有代碼方法,這種裝飾器的新的方法沒有提供比現有方法更多的優勢,大到足矣推翻原有的設計思路。
  • 社區內的投票,支持的也很少(基于表情符號的投票),用戶反饋不多。

可能有小伙伴會說了,有注解做裝飾器了,代碼會簡潔不少。

但其實 Go 團隊的態度很明確:

Go 認為可讀性更重要,如果只是額外多寫一點代碼,在權衡后,還是可以接受的。

償還的過程

如果是在職場中工作多年的小伙伴,其實不難發現 Go 的發展史和業務的發展節奏是類似的。

在社區中吐槽的主要是兩塊,如下:

  • 為什么這個功能不如此設計?
  • 這個功能為什么沒有支持?

不如此設計

為什么 Go 語言不如此設計?經典的像是 Go 的錯誤處理(error),很多小伙伴會先入為主,以其他語言的最佳實踐,要教 Go 團隊設計,要 throw,要 catch!

其實想一下,我們做一個業務,這個業務就是 Go 語言。我們需要先做業務建模,確定 Go 的核心思想,才能持續的迭代和設計。

Go 語言的設計定義很明顯是:既要簡單、還要顯式,不能有隱式、要避免復雜,所以社區傳遞的是 “less is more” 的設計理念。

這么想,很多提案的落地,被拒等,都能了解到 Go 語言的設計哲學和團隊理念。

還沒有支持

為什么 Go 語言的 XXX 功能沒有支持?經典的像是 Go 的泛型、注解等功能。

還沒有支持的可能性有三點,如下:

  • 還沒有想清楚。
  • 早就被拒絕了。
  • 優先級不夠高。

實際上和我們業務迭代一樣,Go 團隊的人力資源有限,做事會有優先級。前文所提到的 Russ Cox 就是現在 Go 團隊 Leader,每年也會開相關的會議討論事項。

像是 Go 泛型,顯然沒有,也不會影響到 Go 在業務初期的短期發展,國內依然存有一定的占用率。2011 年沒有想清楚,也就一直持續思考和嘗試了...

而注解,或是你們想到的。很多在 go issues 其實早就被拒絕過多次,自然還沒有支持,也是因為他不大可能直接出現了。

推進的模式

Go 在推進或償還新技術改進時,現在采取的模式都是一樣的。會先設計一個編譯時可以指定的 “變量”。

例如:

  • 泛型的 G 變量。
  • Modules 的 GO111MODULE 變量。

再在 Go 的不斷迭代中,推進使用和反饋,再推進變量的默認開啟,逐漸去除。

可以參考 GO111MODULE 的過程。

總結

我們在學習很多語言、技能時,會以既有的知識去認知,再對新的對象建立新的認知樹,很容易會有先入為主的認知行為。

但若沒有及時思考,就很容易產生偏見。認為 XXX 是 XXX,你 Go 語言就應該是 XXX,這樣是有失偏頗的。

就像我們行業經常討論的,網上的 A 同學,35 歲被裁員了。那你我,35 歲就 100% 會下崗嗎?

相反,Go 語言這 10+ 年來,基于自己的設計理念。保持了大致一貫的 less is more 設計理念,是值得贊許的。

 

我們要知道軟件設計,是沒有銀彈的。Go 語言的設計理念,有好有壞,社區也有不少人對大道至簡的理念嗤之以鼻。

 

責任編輯:武曉燕 來源: 腦子進煎魚了
相關推薦

2013-08-02 08:59:41

NASA公有云云計算

2023-03-21 07:57:37

Go語言設計模式

2012-03-27 22:53:40

三星

2018-03-12 22:13:46

GO語言編程軟件

2013-08-02 14:10:24

移動App交互設計

2024-12-13 16:28:43

2023-03-27 00:20:48

2023-10-13 00:00:00

設計模式GO語言

2012-10-08 09:25:59

GoGo語言開發語言

2022-03-13 23:51:39

Web項目Go

2015-11-25 10:43:03

DGORust

2013-03-22 10:55:06

Go

2025-08-28 02:12:00

2022-03-25 21:57:49

匯編Go語言

2022-10-30 23:13:30

contextGo語言

2022-04-18 09:41:14

Go架構設計

2023-12-30 10:22:57

Go語言函數開發

2014-10-31 09:48:36

Go語言

2013-05-15 09:27:58

2020-04-07 16:12:56

Go編程語言開發
點贊
收藏

51CTO技術棧公眾號

亚洲国产福利在线| 婷婷综合另类小说色区| 91在线视频免费| 久久免费小视频| 亚洲宅男一区| 欧美日韩亚洲综合一区二区三区| 亚洲国产精品影视| 天天操天天干天天操| 日精品一区二区| 欧美裸体男粗大视频在线观看| 亚洲一区二区乱码| 亚洲视频资源| 亚洲国产精品久久人人爱蜜臀| 欧美日韩国产综合视频在线| 国产日本精品视频| 久久一二三四| 欧美超级乱淫片喷水| 欧美丰满少妇人妻精品| 精品视频国内| 欧美亚洲国产一区二区三区va| 在线观看17c| 91网在线播放| 久久先锋影音av鲁色资源| 91免费在线视频| 亚洲黄网在线观看| 伊人久久综合| 欧美成人免费一级人片100| 久久亚洲AV成人无码国产野外 | 91成人性视频| 欧美视频www| 日本激情一区| 国产亚洲精品久久| 亚洲精品国产成人av在线| 成人污版视频| 欧美日韩成人一区| 国产黄色特级片| 美女扒开腿让男人桶爽久久软| 亚洲精品写真福利| 一区二区三区四区视频在线| 可以在线观看的av| 91日韩在线专区| 精品免费视频123区| 337p日本欧洲亚洲大胆色噜噜| 国产三级三级三级精品8ⅰ区| 精品国产一区久久久| 美女又爽又黄视频毛茸茸| 国产精品流白浆在线观看| 3d成人动漫网站| 欧美在线aaa| 小明成人免费视频一区| 色噜噜久久综合| 妞干网在线免费视频| 在线能看的av网址| 岛国av午夜精品| 日韩av三级在线| 人人草在线视频| 色婷婷亚洲精品| 欧美一级片中文字幕| 日韩伦理在线一区| 欧美日韩精品在线观看| 欧美一区二区三区爽大粗免费| 国产精品25p| 欧美丝袜美女中出在线| 成熟老妇女视频| 91tv亚洲精品香蕉国产一区| 欧美日韩黄色一区二区| 免费看的av网站| 亚洲国产中文在线| 精品国产一区二区三区久久久蜜月| 欧洲成人午夜精品无码区久久| 91精品丝袜国产高跟在线| 欧美精品一区二区精品网| 久久久精品人妻无码专区| 一本色道久久综合狠狠躁的番外| 国产一区二区三区在线免费观看| 性爱在线免费视频| 亚洲色图插插| 91精品国产高清久久久久久久久| 男人天堂2024| 激情欧美一区二区三区在线观看| 99re在线播放| 欧美日韩视频精品二区| 国产精品理论片| 精品免费久久久久久久| 欧美aa一级| 欧美日韩一区中文字幕| 性感美女一区二区三区| 欧美日韩一本| 精品国偷自产在线视频99| 看片网站在线观看| 六月婷婷一区| 91在线网站视频| 四虎国产精品永远| 国产精品丝袜一区| 国产亚洲黄色片| 99riav视频一区二区| 日韩欧美美女一区二区三区| 小毛片在线观看| 欧美gayvideo| 777精品视频| 国产又爽又黄免费软件| 成人av在线影院| 亚洲一卡二卡三卡| a天堂资源在线| 欧美日韩一级黄| 水蜜桃av无码| 一区二区三区四区日韩| 日韩美女在线观看一区| 超碰福利在线观看| 中文字幕欧美国产| 亚洲 欧美 日韩 国产综合 在线| 久久天天久久| 日韩国产在线播放| 免费国产羞羞网站美图| 日韩在线卡一卡二| 国产主播一区二区三区四区| 无遮挡的视频在线观看| 精品久久久久久电影| 肉色超薄丝袜脚交| 久久av超碰| 欧美黑人狂野猛交老妇| 在线观看国产小视频| 久久影院午夜片一区| 国产精品久久久久久久乖乖| 97色婷婷成人综合在线观看| 亚洲精品一区av在线播放| 免费一级肉体全黄毛片| 久久国产精品99久久久久久老狼| 欧美xxxx黑人又粗又长密月 | 日韩在线观看高清| 成年人视频在线免费看| 成人免费黄色大片| 成人av在线播放观看| 在线播放成人| 最近中文字幕mv在线一区二区三区四区 | 一区二区三区播放| 久久久久久久久久久久久女国产乱| 少妇久久久久久被弄到高潮| 综合久久伊人| 日韩亚洲精品视频| 精品乱码一区内射人妻无码 | 日韩欧美在线综合网| 少妇高潮惨叫久久久久| 日本vs亚洲vs韩国一区三区 | 精品视频在线一区二区| 精品视频999| 自拍偷拍视频亚洲| 鲁大师成人一区二区三区| 美国av一区二区三区| 黄色视屏在线免费观看| 亚洲精品乱码久久久久久按摩观| av资源吧首页| 不卡一二三区首页| 极品美女扒开粉嫩小泬| 亚洲资源网你懂的| 国产精品96久久久久久又黄又硬| 日本免费一区二区三区最新| 欧美特级www| 三上悠亚影音先锋| 肉色丝袜一区二区| 午夜欧美性电影| 人人精品久久| 久久综合久久八八| 精品人妻一区二区三区四区不卡 | 成品人视频ww入口| 精品女人视频| 国产成人久久久| 日韩欧美小视频| 337p亚洲精品色噜噜噜| 久久中文免费视频| 成人sese在线| 日韩精品一区二区三区不卡| 日韩免费看片| 亚洲一区二区三区久久| 91吃瓜在线观看| 亚洲品质视频自拍网| 成人黄色免费网| 亚洲私人黄色宅男| 国产高潮失禁喷水爽到抽搐| 国产视频一区欧美| 西游记1978| 日韩一区二区三区精品| 欧美伊久线香蕉线新在线| 国产高清美女一级毛片久久| 欧美剧情片在线观看| 精品少妇theporn| 久久久天堂av| 人妻换人妻仑乱| 亚洲精品专区| 亚洲最大色综合成人av| 999在线精品| 日本亚洲欧美成人| 91香蕉在线观看| 国产偷亚洲偷欧美偷精品| 午夜一级黄色片| 一区二区三区四区在线免费观看 | 高清欧美性猛交xxxx| 国产黄色在线播放| 日韩精品中午字幕| 国产精品尤物视频| 亚洲一区二区影院| 国产三级在线观看完整版| 国产69精品久久久久毛片| 久草在在线视频| 国产综合自拍| 亚洲图片小说在线| 麻豆一区一区三区四区| 成人免费福利在线| 色多多在线观看| 精品少妇v888av| sese一区| 日韩av在线最新| 朝桐光av在线一区二区三区| 欧美午夜精品一区二区三区| 日本熟伦人妇xxxx| 亚洲欧洲国产日本综合| 无码国产69精品久久久久同性| 国产成人综合网站| 免费一区二区三区在线观看| 中文亚洲字幕| 日韩小视频网站| 亚洲色图插插| 影音先锋欧美在线| 精品香蕉视频| 日本一区二区三区视频在线观看| 国产乱人伦丫前精品视频| 亚洲japanese制服美女| 影音成人av| 热久久这里只有| 2021中文字幕在线| 欧美极品少妇与黑人| av中文字幕在线观看| 中文国产成人精品| 国产精品一区二区三区四区色| 日韩av网站在线| 风流老熟女一区二区三区| 日韩一级精品视频在线观看| 一本色道久久综合亚洲| 欧美色视频在线| 一区二区乱子伦在线播放| 日本黄色一区二区| 中文字幕在线看人| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 亚洲精品视频在线看| 黄色香蕉视频在线观看| 国产精品久久久久7777按摩| 人妻熟人中文字幕一区二区| 国产亚洲精品久| 日韩丰满少妇无码内射| 久久新电视剧免费观看| av女人的天堂| 国产精品久线观看视频| 九九热久久免费视频| 国产精品国产三级国产普通话99 | 亚洲 自拍 另类 欧美 丝袜| 国产美女视频91| 丰满少妇一区二区三区专区| 久久99热国产| 97人人模人人爽人人澡| 国产高清成人在线| 国产免费一区二区三区最新6| 99麻豆久久久国产精品免费优播| 日本少妇色视频| 国产日韩精品一区二区三区| 一本在线免费视频| 亚洲三级久久久| 国产性生活网站| 欧美日韩精品二区| 波多野结衣视频免费观看| 欧美三级视频在线播放| 91精品国产乱码久久| 日韩欧美你懂的| 天堂资源最新在线| 一区二区福利视频| 国产在线看片| 午夜精品蜜臀一区二区三区免费 | 色综合中文字幕| 中文字幕一区二区三区四区免费看| 欧美日韩国产不卡| 亚洲国产成人精品一区二区三区| 日韩电影免费在线观看中文字幕| 高清美女视频一区| 久久99精品久久久久久琪琪 | 色婷婷久久综合| 亚洲熟女乱色一区二区三区久久久| 91精品久久久久久久91蜜桃 | 在线观看国产精品91| 伊人在我在线看导航| 久久久久久12| 成人日韩在线| 成人精品水蜜桃| 国产成人一区二区三区影院| 男同互操gay射视频在线看| 亚洲国产日本| 午夜视频在线网站| 91小视频在线| 欧美日韩一级在线观看| 在线影视一区二区三区| 国产一区二区视频免费观看| 亚洲国产天堂久久综合| 欧美成年黄网站色视频| 91精品国产色综合久久不卡98口 | 国产一区二区三区奇米久涩| 色一区二区三区四区| 精品少妇在线视频| 紧缚奴在线一区二区三区| 亚洲 小说 欧美 激情 另类| 一区二区三区日韩精品| 中文天堂在线播放| 亚洲精品美女在线观看| 菠萝菠萝蜜在线视频免费观看| 欧美做受高潮电影o| 日本伊人久久| 亚洲综合首页| 日本vs亚洲vs韩国一区三区二区 | 国产精品二三区| 免费观看成人毛片| 欧美成人一区二区三区在线观看| av网站无病毒在线| 欧洲成人免费aa| 国产精品一线| 日b视频免费观看| 国产尤物一区二区在线| 99自拍偷拍视频| 日本高清免费不卡视频| 天堂av网在线| 午夜精品一区二区三区av| 日韩精品中文字幕一区二区| 一区二区精品视频| 日韩和欧美一区二区| 人人妻人人澡人人爽人人精品 | 国产日韩综合av| www欧美在线| 国产视频亚洲精品| 秋霞伦理一区| 美日韩精品免费| 亚洲一区二区三区四区五区午夜 | 天堂在线资源网| 欧美激情第一页xxx| 日韩一区二区三区高清在线观看| 99亚洲精品视频| 国内成人自拍视频| 一级片一级片一级片| 欧美日本不卡视频| 日本视频不卡| 成人福利视频网| 天天色综合色| 三级黄色片免费观看| 亚洲激情图片qvod| 亚洲国产精品suv| 久久久亚洲成人| 欧美一级全黄| 日韩久久一级片| 久久久精品影视| 波多野结衣视频观看| 深夜福利国产精品| 北岛玲精品视频在线观看| 国产精品h视频| 国产成人在线免费| 国产精品9191| 亚洲精品久久久久中文字幕欢迎你| xxxx视频在线| 免费精品视频一区| 青青青伊人色综合久久| 99精品中文字幕| 69精品人人人人| 免费看电影在线| 欧美视频小说| 美女www一区二区| 青青草原在线免费观看| 亚洲白虎美女被爆操| 亚洲天堂资源| 亚洲一区二区精品在线| 国产成人亚洲综合a∨婷婷图片| 一区二区三区免费高清视频| 亚洲人成电影在线观看天堂色| av成人在线播放| 久久综合亚洲精品| 91麻豆蜜桃一区二区三区| 最新国产中文字幕| 欧美老女人性生活| 午夜先锋成人动漫在线| 簧片在线免费看| 亚洲电影在线播放| 国产中文字幕在线视频| 51成人做爰www免费看网站| 日韩香蕉视频| 超碰人人人人人人人| 精品欧美一区二区三区精品久久| 亚洲最大网站| 国产精品啪啪啪视频| 久久久噜噜噜久久中文字幕色伊伊| 一区二区三区午夜| 韩国国内大量揄拍精品视频| 欧洲激情视频| 香蕉视频污视频| 欧美精品日韩一区| 美女av在线免费看| 加勒比海盗1在线观看免费国语版| 久久夜色精品国产噜噜av|