精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产午夜精品一区二区三区四区| 亚洲日本国产| 在线不卡a资源高清| 粉嫩av一区二区三区天美传媒 | 自拍视频在线网| 久久国产夜色精品鲁鲁99| 色在人av网站天堂精品| 亚洲午夜福利在线观看| 91精品一区| 欧美性xxxx极品hd欧美风情| 在线看成人av电影| 天天摸天天碰天天爽天天弄| 蜜桃视频在线观看一区二区| 久久久免费电影| 免费看的黄色录像| 国产成人av毛片| 欧美在线观看你懂的| 99国产精品白浆在线观看免费| 久久这里精品| 成人晚上爱看视频| 成人av.网址在线网站| 在线能看的av| 欧美啪啪一区| 日韩中文字幕欧美| 日韩网站在线播放| 国产图片一区| 日韩欧美一级特黄在线播放| 久草在在线视频| 美女在线视频免费| 亚洲美女区一区| 久久久久久久久久码影片| 97人人爽人人爽人人爽| 久久久久国产精品一区二区| 久久久久久久久久久免费精品 | 婷婷开心激情网| 国产资源精品在线观看| 国产精品91久久| 五月婷婷激情网| 国产精品mm| 久久视频免费观看| 可以免费看av的网址| 精品日韩免费| 一区二区欧美激情| 色哟哟精品观看| 亚洲精品国产精品粉嫩| 亚洲国产精品va在线看黑人| 成人做爰www看视频软件 | 精品免费视频.| 五月天丁香花婷婷| 国产成人午夜性a一级毛片| 色综合久久中文字幕综合网| 国内自拍在线观看| 成人观看网址| 午夜精品123| 蜜臀av色欲a片无码精品一区| 手机在线免费av| 亚洲一区二区三区四区在线免费观看 | 国产亚洲视频一区| 日本久久久久| 在线播放中文一区| 古装做爰无遮挡三级聊斋艳谭| 亚洲一区导航| 欧美一区二区成人6969| 国产人妻精品久久久久野外| 免费观看亚洲天堂| 日韩午夜激情电影| youjizz.com日本| 麻豆精品av| 亚洲欧美制服综合另类| av女人的天堂| 清纯唯美日韩| 麻豆成人在线看| 久久久精品国产sm调教| 99精品视频免费观看| 国产成人精品一区| 国产又大又长又粗| 福利视频网站一区二区三区| 精品国产免费久久久久久尖叫| 日韩美女一级视频| 国产精品午夜久久| 国产精品igao激情视频| 国产精选在线| 欧美无砖砖区免费| 91视频免费入口| 日日天天久久| 中文字幕亚洲专区| 青青草原免费观看| 亚洲一区黄色| 国产精品网址在线| 亚洲AV无码国产精品午夜字幕 | 另类欧美小说| 色网站在线看| 午夜久久电影网| 老头吃奶性行交视频| 国产精品亚洲一区二区在线观看| 精品国精品国产| av电影网站在线观看| 亚洲一本二本| 欧美在线亚洲在线| 国产精品人妻一区二区三区| av电影在线观看一区| 天天综合狠狠精品| 成人影音在线| 欧美乱妇20p| aaaa黄色片| 999久久久精品国产| 97久久精品人搡人人玩| 亚洲字幕av一区二区三区四区| 国产99久久久精品| 天堂资源在线亚洲视频| 97人人爽人人澡人人精品| 欧美色精品在线视频| 免费黄色a级片| 四虎成人av| 日本国产精品视频| 俄罗斯嫩小性bbwbbw| 中文字幕一区二区三区精华液 | 九九色在线视频| 欧美主播一区二区三区美女| 中文字幕人妻一区| 女人色偷偷aa久久天堂| 国产精品jizz在线观看麻豆| 色窝窝无码一区二区三区成人网站| 国产精品无码永久免费888| 欧美 日韩 亚洲 一区| 国产精品白丝久久av网站| 亚洲午夜久久久久久久| 中文字幕亚洲精品在线| 国产福利视频一区二区三区| 一本色道久久综合亚洲精品婷婷| 少妇淫片在线影院| 精品国产髙清在线看国产毛片| 男女全黄做爰文章| 日产国产欧美视频一区精品| 久久久久久九九九九| 黄色18在线观看| 精品国产一区久久| 九九热精彩视频| 国产在线精品一区二区不卡了 | 亚洲一区二区三区毛片| 国产高清一区在线观看| 色诱视频网站一区| 亚洲永久精品ww.7491进入| 一本久道久久综合狠狠爱| 国产超碰91| 女囚岛在线观看| 日韩欧美在线综合网| 日本一级二级视频| 激情偷乱视频一区二区三区| 在线精品亚洲一区二区| 91成人app| 美日韩精品视频免费看| 99在线精品视频免费观看20| 亚洲欧洲一区二区在线播放| 一区二区在线免费看| 99精品在线观看| 成人激情视频在线观看| 韩国av网站在线| 欧美一区二区三区免费大片| 亚洲欧美一区二区三区四区五区| 国产尤物一区二区在线| 免费的av在线| 波多野结衣欧美| 欧美一区视频在线| 日韩黄色影片| 欧美日韩在线免费视频| 日本二区三区视频| 国产不卡视频一区二区三区| 日本福利视频一区| 一个色免费成人影院| 国产精品国内视频| 黄色免费网站在线观看| 日韩精品中文字幕在线一区| 国产无遮挡裸体免费视频| 91尤物视频在线观看| 成年人免费大片| 久久影院100000精品| 91精品久久久久久蜜桃| 国产资源在线观看入口av| 在线成人免费网站| 国产99对白在线播放| 婷婷成人综合网| 99国产精品免费| 国产成人午夜精品5599| 成人免费毛片网| 欧美hd在线| 国精产品一区二区| 青青在线精品| 91国内精品久久| 日本蜜桃在线观看| 亚洲第一级黄色片| 最新国产中文字幕| 亚洲五码中文字幕| 中字幕一区二区三区乱码| 国产精品一区二区三区网站| 欧美日韩中文在线视频| 91综合在线| 久久青青草综合| 成人在线分类| 日本亚洲欧美成人| 五月花成人网| 国产一区二区三区视频| 丰满人妻一区二区| 欧美三电影在线| 日韩av综合在线| 成人免费在线视频观看| 亚洲永久无码7777kkk| 国产精品伊人色| 爱情岛论坛成人| 亚洲国产第一| 午夜久久久久久久久久久| 免费电影一区二区三区| 99视频网站| 五月天色综合| 国产97免费视| 九九精品调教| 久久亚洲国产精品成人av秋霞| 色鬼7777久久| 精品国产污污免费网站入口| 亚洲天堂avav| 欧美在线视频全部完| 国产午夜在线播放| 亚洲综合在线免费观看| 免费观看特级毛片| 久久精品视频一区| 超碰男人的天堂| 国产宾馆实践打屁股91| 日本一区二区三区在线免费观看| 蜜桃一区二区三区在线| 国产成人手机视频| 香蕉久久夜色精品| 热99这里只有精品| 亚洲网站视频| 男人c女人视频| 亚洲第一天堂| 婷婷视频在线播放| 日韩免费一区| 亚洲人一区二区| 欧美先锋资源| 少妇精品久久久久久久久久| 婷婷激情久久| 美女精品国产| 亚洲欧美tv| 欧美日韩在线精品一区二区三区| 青青草这里只有精品| 精品久久sese| 亚洲男人都懂第一日本| 免费久久99精品国产自| 香蕉视频一区| 日韩电影天堂视频一区二区| 禁果av一区二区三区| 日本成人黄色| 欧美日韩一二三四| 一本色道久久综合亚洲精品婷婷| 视频在线不卡免费观看| www.-级毛片线天内射视视| 亚洲国产一成人久久精品| 男女爱爱视频网站| 国产精品激情电影| 久激情内射婷内射蜜桃| 一本色道久久综合亚洲精品高清| 国产一区二区网| 久久高清免费观看| 亚洲老女人av| 久久国产精品99久久人人澡| 亚洲理论中文字幕| 成人精品视频一区二区三区| 久久精品女同亚洲女同13| 久久一日本道色综合| 国产精品国产三级国产专业不| 国产精品色在线观看| 一区二区三区影视| 一区二区三区成人在线视频| 男人的天堂一区| 日本高清不卡在线观看| 91成人在线免费| 欧美成人r级一区二区三区| 香蕉视频免费在线看| 日韩精品免费观看| 在线免费av电影| 欧美肥婆姓交大片| 另类图片综合电影| 91日本在线视频| 久久久亚洲欧洲日产| 日韩欧美在线一区二区| 欧美国产高潮xxxx1819| 大肉大捧一进一出好爽视频| 日日夜夜精品视频天天综合网| 99国产精品久久久久久| 成人av在线资源网站| 亚洲av熟女国产一区二区性色| 一区二区三区在线视频播放| 中文字幕在线欧美| 欧美一区二区精品在线| 黄色毛片在线看| 欧美韩日一区二区| 成人免费网站www网站高清| 亚洲在线免费视频| 欧美激情在线精品一区二区三区| 好色先生视频污| 首页国产欧美日韩丝袜| 女同性αv亚洲女同志| 国产欧美日韩在线看| 久久婷婷一区二区| 欧美少妇xxx| 天天摸天天干天天操| 久热精品在线视频| av在线不卡精品| 国产亚洲精品久久飘花| 国产精品97| 免费大片在线观看| 成人自拍视频在线| 美国一级片在线观看| 欧美午夜精品久久久久久浪潮| 99精品在线视频观看| 亚洲人精品午夜在线观看| 欧美xxx黑人xxx水蜜桃| 国产日本欧美一区二区三区在线| 欧美自拍一区| 国产肉体ⅹxxx137大胆| 蜜桃视频一区二区三区在线观看| 国产精品久久AV无码| 亚洲黄色免费网站| 91午夜交换视频| 少妇精69xxtheporn| 免费成人美女女| 久久一区免费| 亚洲三级影院| 亚洲成a人无码| 亚洲精品国产精华液| 中文字幕日韩国产| 亚洲性生活视频| 亚洲精品88| 久久国产精品-国产精品| 国产精品九九| 亚洲av无码专区在线播放中文| 亚洲精品中文在线| 99久久精品无免国产免费| 俺也去精品视频在线观看| 成人国产激情在线| 日本一区二区精品| 久久国产精品久久w女人spa| 亚洲av无码一区二区三区观看 | www.午夜精品| 日韩成人综合网站| 一区二区免费在线视频| 免费高清视频精品| 91导航在线观看| 欧美伦理视频网站| 黄网址在线观看| 亚洲aaaaaa| 国产精品va| 91丝袜在线观看| 精品久久久久久| 日韩av成人| 国产精品www网站| 精品香蕉视频| 男人的天堂最新网址| 国产精品久久久久aaaa| 97超碰人人草| 色综合久久精品亚洲国产| 哺乳一区二区三区中文视频 | 午夜写真片福利电影网| 日韩久久久精品| gogo久久| 欧美一级爽aaaaa大片| 美女诱惑一区二区| 国产suv精品一区二区68| 欧美va亚洲va| 日韩欧美一中文字暮专区| 日本一区高清不卡| 久久se这里有精品| 一区二区三区免费高清视频| 亚洲精品电影网在线观看| 欧美男体视频| 一区二区三区四区视频在线观看| 国产一区二区女| 久久狠狠高潮亚洲精品| 国产午夜精品全部视频在线播放 | 717成人午夜免费福利电影| 中文字幕在线三区| 久久精品日产第一区二区三区| 日韩不卡一区二区| 好吊色视频在线观看| 国产婷婷色综合av蜜臀av| 视频欧美精品| 波多野结衣之无限发射| 国产农村妇女毛片精品久久麻豆 | 天天干天天操天天干天天操| 国产精品一品二品| 久久午夜免费视频| 日韩视频免费在线观看| 国内自拍欧美| 国产精品久久久毛片| 亚洲在线视频网站| www.亚洲视频| 国产精品永久入口久久久| 奇米色一区二区| 免费毛片一区二区三区| 最好看的2019的中文字幕视频|