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
相關文章
- Tiobe 排名 Go 到 11 了Go
- 4歲雪地裸跑、7歲自主創業,這個11歲機器人比賽冠軍,南京大學自考畢業了!...創業機器人
- 今天,VS Code 五歲了。
- Day11 go unnoticedGo
- 《植物大戰殭屍》10歲了
- Hello,“靈感週末”四歲了!
- 11.Go 嵌入型別Go型別
- 這些年,他們都35歲了
- 驀然回首,Java 已經 24 歲了!Java
- Rust語言4歲了 | rust-langRust
- 11歲的React正迎來自己口碑的拐點React
- 30 歲了,還不知道想做什麼
- 從.NET轉GO了Go
- 周杰倫稱昆凌懷三胎 周杰倫幾歲結婚孩子幾歲了
- 35歲沒有晉級的同事都去哪了?
- 6 歲!是時候重新認識下 Serverless 了Server
- 6歲!是時候重新認識下Serverless了Server
- 面試了一個 39 歲程式設計師後,我被罵了……面試程式設計師
- 《我的世界》十歲了:它如何改變了遊戲和現實?遊戲
- 清華尹成帶你實戰GO案例(11)Go Line FiltersGoFilter
- Git 12 歲了,送給你 12 個 Git 使用技巧Git
- 馬上要到30歲,你也被催婚了嗎
- 認真一點學 Go:11. 包Go
- 11歲少女叫板支付寶!會寫程式碼的孩子,到底多可怕?
- Go1.11要支援 WebAssembly 了GoWeb
- 那些到了 30 歲的技術人,後來都去哪了?
- 程式猿,37歲了你還要去投簡歷面試面試
- Git 12 歲了,為你送上 12 個 Git 的使用技巧!Git
- 二十三歲:一場夢想的追逐開始了
- 深入解釋了Go context使用方式GoContext
- go語言面試選擇題11道(4)go語言深入學習Go面試
- 洛天依9歲了,但Vsinger的故事還在繼續
- 終於!“30 歲”的 Linux 核心 C 語言將升級到 C11Linux
- 兄弟連go教程(11)函式 - 函式定義Go函式
- Go語言學習之路-11-方法與介面Go
- Go語言處理—Day11—反射機制Go反射
- 33歲轉行python,如果不是5歲兒子給我的鼓勵,可能幸福也不會來敲門了Python
- 程式設計師分界線:30歲,30歲轉行、35歲轉行、35歲被迫裁員程式設計師