Go,11 歲了!
本文翻譯自 Go 官方部落格文章《Eleven Years of Go》,原作者:Russ Cox。
今天,我們一起慶祝 Go 語言正式開業釋出 11 週年。去年的“Go turning 10”週年慶典聚會似乎已成為久遠的回憶。這是艱難的一年,但我們一直保持了 Go 開發的步伐,並積累了很多亮點。
在去年 11 月,我們在慶祝Go 10 週年後不久就釋出和上線了go.dev 和 pkg.go.dev站點。
今年 2 月,Go 1.14 版本提供了第一個正式的 “生產就緒” 的 go module 實現,並進行了許多效能改進,包括更快的 defer和真正搶佔式的 goroutine 排程,以減少排程和垃圾收集延遲。
在今年三月初,我們推出了新版 protobuf API:google.golang.org/protobuf,大幅改善了對 protobuf reflection 和自定義訊息的支援。
當新冠疫情大流行發生時,我們決定在春季暫停所有公開發布或活動,因為大家都知道所有人的注意力都聚焦在其他地方。但是我們一直在努力,我們的團隊中的一個成員加入了 Apple/Google 發起的“privacy-preserving exposure notifications”專案,以支援全球範圍內的聯絡人追蹤工作。5 月,該小組啟動了用 Go 編寫的 reference backend server。
我們繼續改進gopls,這讓許多編輯器受益並都啟用了高階 Go-aware 支援。六月份,VSCode Go 擴充套件正式加入 Go 專案,現在由從事 gopls 的同一位開發人員維護。
同樣在 6 月,由於 Go 社群的反饋意見,我們還將 pkg.go.dev 背後的程式碼開源,並將其作為 Go 專案的一部分。
6 月下旬,我們 釋出了有關 Go generics 的最新設計草案,以及原型工具和一個支援 go generics 實驗語法的 playground。
7 月,我們釋出並討論了三個新的有關 Go 未來演化的設計草案:go:build、檔案系統介面和構建時檔案嵌入。(我們將在 2021 年看到所有新特性)
8 月,Go 1.15 版本釋出!該版本以優化和 bug 修復為主,沒有提供太多新功能。其最重要的部分是開始重寫連結器,這使它在進行大型專案構建時,平均執行速度提高了 20%,平均使用的記憶體減少了 30%。
上個月,我們發起了年度 Go 使用者調查。分析結果後,我們會將結果釋出到部落格上。
Go 社群已經與其他所有人一起適應了 “虛擬優先” 的原則,今年我們看到了許多虛擬聚會和十多個虛擬 Go 會議。上週,Go 團隊在 Google Open Source Live 中舉辦了 “Go Day” 活動。
前進
我們也對 Go 語言在其第 12 年即將發生的事情感到非常興奮。近期,Go 團隊成員將參加GopherCon 2020並做以下展示和分享。請開啟您的日曆,做好提醒標記!
- 11 月 11 日上午 10:00,Robert Griesemer 的演講 “Typing [Generic] Go”;在 10:30 AM 進行 Q&A。
- 11 月 11 日中午 12:00,現場播放 Go 時間播客的實況錄影:“What to Expect When You’re NOT Expecting”,該集播客由包括 Hana Kim 組成的專家除錯小組主持。
- Michael Knyszek 在 11 月 11 日下午 1:00 發表演講 “Evolving the Go Memory Manager's RAM and CPU Efficiency” ;在下午 1:50 進行 Q&A。
- Dan Scales 在 11 月 11 日下午 5:10 發表演講 “Implementing Faster Defers”; 在下午 5:40 進行 Q&A。
- 11 月 12 日下午 3 點,與朱莉·邱(Julie Qiu),麗貝卡·史翠寶(Rebecca Stambler),拉斯·考克斯(Russ Cox),薩默·阿杰曼尼(Sameer Ajmani)和範·裡珀(Van Riper)一起的現場問答環節 “ Go Team-Ask Me Anything” 。
- 奧斯汀·克萊門茨(Austin Clements)在 11 月 12 日下午 4:45 發表演講 “Pardon the Interruption: Loop Preemption in Go 1.14” ; 在下午 5:15 進行 Q&A。
- 喬納森·阿姆斯特丹(Jonathan Amsterdam)在 11 月 13 日下午 1:00 發表的演講:“Working with Errors” ; 在下午 1:50 進行 Q&A。
- 卡門·安多(Carmen Andoh)11 月 13 日下午 5:55 發表的演講 “Crossing the Chasm for Go: Two Million Users and Growing” 。
Go 釋出計劃
2021 年 2 月,Go 1.16 版本將釋出,該版本將包括新的檔案系統介面和構建時檔案嵌入。它將完成連結器的重寫,從而帶來更多的效能改進。它將包括對新的 Apple Silicon(GOARCH=arm64)Mac 的支援。
2021 年 8 月,Go 1.17 版本無疑會帶來更多功能和改進,儘管遠遠不夠,確切的細節仍然懸而未決。它將包括一個針對 x86-64 新的基於暫存器的呼叫約定(不破壞現有程式集!),這將使程式整體更快。(對其他體系結構的支援將在以後的版本中釋出。)新的//go:build行肯定會包含一個不錯的功能,肯定比當前// +build更不容易出錯。我們希望明年可以進行 Beta 測試的另一個備受期待的功能是對 go test 命令中的模糊測試 (fuzz test) 的支援。
有關 Go module
明年,我們將繼續致力於開發對 Go module 的支援,並將其很好地整合到整個 Go 生態系統中。Go 1.16 將包括我們迄今為止最流暢的 Go module 體驗。我們最近的一項調查的初步結果是,現在有 96%的使用者已採用 Go 模組(高於一年前的 90%)。
我們還將最終終止對基於 GOPATH 的開發的支援:使用標準庫以外的依賴項的任何程式都將需要一個 go.mod。(如果您尚未切換到 go module,請參閱GOPATH Wiki 頁面以獲取有關從 GOPATH 到 go module 的最後一步的詳細資訊。)
從一開始,Go module 的目標就是 “將軟體包版本的概念新增到 Go 開發人員和我們的工具的常用詞彙中”,從而為整個 Go 生態系統中的 module 和版本提供深度支援。整個生態系統對包版本的廣泛理解使得go module 映象、chechsum 資料庫和 module index成為可能。在明年,我們將看到更多 module 支援被新增到更多的工具和系統中。例如,我們計劃研究新的工具,以幫助模組作者釋出新版本(go release),並幫助 module 使用者擺脫過時的 API 並完成遷移(新的 go fix)。
一個更為有說服力的例子是,我們建立了 gopls來減少編輯器為支援 Go 而依賴許多外部工具的情況:將依賴一堆不支援 go module 的工具轉變為只依賴一個支援 module 的工具。明年,我們將準備讓 VSCode Go 擴充套件預設使用 gopls,以提供出色的、現成的 module 體驗,並將釋出 gopls 1.0。當然,gopls 最大的優勢之一是它與編輯器無關:任何支援語言伺服器協議的編輯器都可以使用它。
版本資訊的另一個重要用途是跟蹤構建中的任何程式包是否具有已知漏洞。明年,我們計劃開發一個已知漏洞的資料庫以及基於該資料庫進行漏洞檢查的工具程式。
Go 軟體包發現站點 pkg.go.dev 是 Go module 啟用的版本感知系統的另一個示例。我們一直致力於正確實現核心功能和使用者體驗,包括今天重新設計後的 pkg.go.dev 的上線。明年,我們將 godoc.org 統一為 pkg.go.dev。我們還將擴充套件展示每個軟體包的版本時間線,顯示每個版本的重要更改,已知漏洞等,以實現你進行依賴新增決策時所需的所有資訊。
我們很高興看到從 GOPATH 到 Go 模組的旅程即將完成,以及 Go 模組正在啟用的所有出色的依賴關係感知工具。
有關 Go generics
每個人心中的下一個功能特性當然是泛型。如上所述,我們於今年 6 月釋出了有關泛型的最新設計草案。從那時起,我們一直在做細節上的完善,並將注意力轉移到了實現可生產版本的細節上。我們將在 2021 年的整個過程中繼續努力,以期在年底之前為人們提供一些試用的目標,也許它是 Go 1.18 beta 的一部分。
感謝大家
Go 不僅限於我們這些 Google Go 團隊的成員。我們要感謝與我們一起開發 Go 專案和工具的貢獻者。除此之外,Go 之所以成功,是因為所有在 Go 蓬勃發展的生態系統中工作併為之貢獻的人們。Go 之外的世界度過了艱難的一年。非常感謝您抽出寶貴的時間加入我們,並幫助 Go 取得成功。謝謝。我們希望大家都安全,並祝您一切順利。
- 我的 Go 技術專欄:“改善 Go 語⾔程式設計質量的 50 個有效實踐” 上線了,歡迎大家訂閱學習!
我的網課 “Kubernetes 實戰:高可用叢集搭建、配置、運維與應用” 在慕課網上線了,感謝小夥伴們學習支援!
Gopher Daily(Gopher 每日新聞) 歸檔倉庫 - https://github.com/bigwhite/gopherdaily
我的聯絡方式:
- 微博:https://weibo.com/bigwhite20xx
- 微信公眾號:iamtonybai
- 部落格:tonybai.com
- github: https://github.com/bigwhite
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- Go 7歲了Go
- Tiobe 排名 Go 到 11 了Go
- Go1.11要支援 WebAssembly 了GoWeb
- “圖靈”10歲了圖靈
- PHP也20歲了PHP
- 今天,VS Code 五歲了。
- 4歲雪地裸跑、7歲自主創業,這個11歲機器人比賽冠軍,南京大學自考畢業了!...創業機器人
- Go了Go
- 11歲美國男孩用玩具熊“黑”了國際網路安全大會
- Mozilla 瀏覽器四歲了!瀏覽器
- 119、歲暮歸南山
- Rust語言4歲了 | rust-langRust
- 驀然回首,Java 已經 24 歲了!Java
- PHP 20歲了:從玩具到巨頭PHP
- 過了 35 歲, 程式設計師真的沒前途了嗎?程式設計師
- 11歲就直播程式設計的少年程式設計
- thrift with Go (0.11.0)Go
- X 視窗系統已經30歲了!
- 從.NET轉GO了Go
- 《我的世界》十歲了:它如何改變了遊戲和現實?遊戲
- 面試了一個 39 歲程式設計師後,我被罵了……面試程式設計師
- 6歲!是時候重新認識下Serverless了Server
- 6 歲!是時候重新認識下 Serverless 了Server
- 程式猿,37歲了你還要去投簡歷面試面試
- Git 12 歲了,送給你 12 個 Git 使用技巧Git
- 開源辦公軟體LibreOffice四歲了
- 11.Go 嵌入型別Go型別
- Day11 go unnoticedGo
- 11歲的React正迎來自己口碑的拐點React
- TensorFlow支援Go語言了Go
- 那些到了 30 歲的技術人,後來都去哪了?
- Git 12 歲了,為你送上 12 個 Git 的使用技巧!Git
- 蹭著 Java 熱點出生的 JavaScript 已經 22 歲了!JavaScript
- 你看,那款名叫“垃圾郵件”的罐頭75歲了
- 蘋果 40 歲了,你該知道的 14 個重要事件蘋果事件
- D2C smile:《精靈寶可夢Go》 40歲以上老玩家超50%Go
- 面試了一個 39 歲程式設計師,我有點慌……面試程式設計師
- 中國人在矽谷——NetScreen的歲月(3) 防火牆做錯了防火牆