Go,11 歲了!
今天,我們一起慶祝 Go 語言正式開業(yè)發(fā)布 11 周年。去年的“Go turning 10”周年慶典聚會似乎已成為久遠的回憶。這是艱難的一年,但我們一直保持了 Go 開發(fā)的步伐,并積累了很多亮點。

在去年 11 月,我們在慶祝Go 10 周年后不久就發(fā)布和上線了go.dev 和 pkg.go.dev站點。
今年 2 月,Go 1.14 版本提供了第一個正式的 “生產(chǎn)就緒” 的 go module 實現(xiàn),并進行了許多性能改進,包括更快的 defer和真正搶占式的 goroutine 調(diào)度,以減少調(diào)度和垃圾收集延遲。
在今年三月初,我們推出了新版 protobuf API:google.golang.org/protobuf,大幅改善了對 protobuf reflection 和自定義消息的支持。
當新冠疫情大流行發(fā)生時,我們決定在春季暫停所有公開發(fā)布或活動,因為大家都知道所有人的注意力都聚焦在其他地方。但是我們一直在努力,我們的團隊中的一個成員加入了 Apple/Google 發(fā)起的“privacy-preserving exposure notifications”項目,以支持全球范圍內(nèi)的聯(lián)系人追蹤工作。5 月,該小組啟動了用 Go 編寫的?reference backend server。
我們繼續(xù)改進gopls,這讓許多編輯器受益并都啟用了高級 Go-aware 支持。六月份,VSCode Go 擴展正式加入 Go 項目,現(xiàn)在由從事 gopls 的同一位開發(fā)人員維護。
同樣在 6 月,由于 Go 社區(qū)的反饋意見,我們還將 pkg.go.dev 背后的代碼開源,并將其作為 Go 項目的一部分。
6 月下旬,我們 發(fā)布了有關(guān) Go generics 的最新設(shè)計草案,以及原型工具和一個支持 go generics 實驗語法的 playground。
7 月,我們發(fā)布并討論了三個新的有關(guān) Go 未來演化的設(shè)計草案:go:build、文件系統(tǒng)接口和構(gòu)建時文件嵌入。(我們將在 2021 年看到所有新特性)
8 月,Go 1.15 版本發(fā)布!該版本以優(yōu)化和 bug 修復為主,沒有提供太多新功能。其最重要的部分是開始重寫鏈接器,這使它在進行大型項目構(gòu)建時,平均運行速度提高了 20%,平均使用的內(nèi)存減少了 30%。
上個月,我們發(fā)起了年度 Go 用戶調(diào)查。分析結(jié)果后,我們會將結(jié)果發(fā)布到博客上。
Go 社區(qū)已經(jīng)與其他所有人一起適應了 “虛擬優(yōu)先” 的原則,今年我們看到了許多虛擬聚會和十多個虛擬 Go 會議。上周,Go 團隊在 Google Open Source Live 中舉辦了 “Go Day” 活動。
前進
我們也對 Go 語言在其第 12 年即將發(fā)生的事情感到非常興奮。近期,Go 團隊成員將參加GopherCon 2020并做以下展示和分享。請打開您的日歷,做好提醒標記!
11 月 11 日上午 10:00,Robert Griesemer 的演講 “Typing [Generic] Go”;在 10:30 AM 進行 Q&A。
11 月 11 日中午 12:00,現(xiàn)場播放 Go 時間播客的實況錄像:“What to Expect When You’re NOT Expecting”,該集播客由包括 Hana Kim 組成的專家調(diào)試小組主持。
Michael Knyszek 在 11 月 11 日下午 1:00 發(fā)表演講 “Evolving the Go Memory Manager's RAM and CPU Efficiency” ;在下午 1:50 進行 Q&A。
Dan Scales 在 11 月 11 日下午 5:10 發(fā)表演講 “Implementing Faster Defers”;在下午 5:40 進行 Q&A。
11 月 12 日下午 3 點,與朱莉·邱(Julie Qiu),麗貝卡·史翠寶(Rebecca Stambler),拉斯·考克斯(Russ Cox),薩默·阿杰曼尼(Sameer Ajmani)和范·里珀(Van Riper)一起的現(xiàn)場問答環(huán)節(jié) “ Go Team-Ask Me Anything” 。
奧斯汀·克萊門茨(Austin Clements)在 11 月 12 日下午 4:45 發(fā)表演講 “Pardon the Interruption: Loop Preemption in Go 1.14” ;在下午 5:15 進行 Q&A。
喬納森·阿姆斯特丹(Jonathan Amsterdam)在 11 月 13 日下午 1:00 發(fā)表的演講:“Working with Errors” ;在下午 1:50 進行 Q&A。
卡門·安多(Carmen Andoh)11 月 13 日下午 5:55 發(fā)表的演講 “Crossing the Chasm for Go: Two Million Users and Growing” 。
Go 發(fā)布計劃
2021 年 2 月,Go 1.16 版本將發(fā)布,該版本將包括新的文件系統(tǒng)接口和構(gòu)建時文件嵌入。它將完成鏈接器的重寫,從而帶來更多的性能改進。它將包括對新的 Apple Silicon(GOARCH=arm64)Mac 的支持。
2021 年 8 月,Go 1.17 版本無疑會帶來更多功能和改進,盡管遠遠不夠,確切的細節(jié)仍然懸而未決。它將包括一個針對 x86-64 新的基于寄存器的調(diào)用約定(不破壞現(xiàn)有程序集!),這將使程序整體更快。(對其他體系結(jié)構(gòu)的支持將在以后的版本中發(fā)布。)新的//go:build行肯定會包含一個不錯的功能,肯定比當前// +build更不容易出錯。我們希望明年可以進行 Beta 測試的另一個備受期待的功能是對 go test 命令中的模糊測試 (fuzz test) 的支持。
有關(guān) Go module
明年,我們將繼續(xù)致力于開發(fā)對 Go module 的支持,并將其很好地集成到整個 Go 生態(tài)系統(tǒng)中。Go 1.16 將包括我們迄今為止最流暢的 Go module 體驗。我們最近的一項調(diào)查的初步結(jié)果是,現(xiàn)在有 96%的用戶已采用 Go 模塊(高于一年前的 90%)。
我們還將最終終止對基于 GOPATH 的開發(fā)的支持:使用標準庫以外的依賴項的任何程序都將需要一個 go.mod。(如果您尚未切換到 go module,請參閱GOPATH Wiki 頁面以獲取有關(guān)從 GOPATH 到 go module 的最后一步的詳細信息。)
從一開始,Go module 的目標就是 “將軟件包版本的概念添加到 Go 開發(fā)人員和我們的工具的常用詞匯中”,從而為整個 Go 生態(tài)系統(tǒng)中的 module 和版本提供深度支持。整個生態(tài)系統(tǒng)對包版本的廣泛理解使得go module 鏡像、chechsum 數(shù)據(jù)庫和 module index成為可能。在明年,我們將看到更多 module 支持被添加到更多的工具和系統(tǒng)中。例如,我們計劃研究新的工具,以幫助模塊作者發(fā)布新版本(go release),并幫助 module 使用者擺脫過時的 API 并完成遷移(新的 go fix)。
一個更為有說服力的例子是,我們創(chuàng)建了 gopls來減少編輯器為支持 Go 而依賴許多外部工具的情況:將依賴一堆不支持 go module 的工具轉(zhuǎn)變?yōu)橹灰蕾囈粋€支持 module 的工具。明年,我們將準備讓 VSCode Go 擴展默認使用 gopls,以提供出色的、現(xiàn)成的 module 體驗,并將發(fā)布 gopls 1.0。當然,gopls 最大的優(yōu)勢之一是它與編輯器無關(guān):任何支持語言服務器協(xié)議的編輯器都可以使用它。
版本信息的另一個重要用途是跟蹤構(gòu)建中的任何程序包是否具有已知漏洞。明年,我們計劃開發(fā)一個已知漏洞的數(shù)據(jù)庫以及基于該數(shù)據(jù)庫進行漏洞檢查的工具程序。
Go 軟件包發(fā)現(xiàn)站點 pkg.go.dev 是 Go module 啟用的版本感知系統(tǒng)的另一個示例。我們一直致力于正確實現(xiàn)核心功能和用戶體驗,包括今天重新設(shè)計后的 pkg.go.dev 的上線。明年,我們將 godoc.org 統(tǒng)一為 pkg.go.dev。我們還將擴展展示每個軟件包的版本時間線,顯示每個版本的重要更改,已知漏洞等,以實現(xiàn)你進行依賴添加決策時所需的所有信息。
我們很高興看到從 GOPATH 到 Go 模塊的旅程即將完成,以及 Go 模塊正在啟用的所有出色的依賴關(guān)系感知工具。
有關(guān) Go generics
每個人心中的下一個功能特性當然是泛型。如上所述,我們于今年 6 月發(fā)布了有關(guān)泛型的最新設(shè)計草案。從那時起,我們一直在做細節(jié)上的完善,并將注意力轉(zhuǎn)移到了實現(xiàn)可生產(chǎn)版本的細節(jié)上。我們將在 2021 年的整個過程中繼續(xù)努力,以期在年底之前為人們提供一些試用的目標,也許它是 Go 1.18 beta 的一部分。
感謝大家
Go 不僅限于我們這些 Google Go 團隊的成員。我們要感謝與我們一起開發(fā) Go 項目和工具的貢獻者。除此之外,Go 之所以成功,是因為所有在 Go 蓬勃發(fā)展的生態(tài)系統(tǒng)中工作并為之貢獻的人們。Go 之外的世界度過了艱難的一年。非常感謝您抽出寶貴的時間加入我們,并幫助 Go 取得成功。謝謝。我們希望大家都安全,并祝您一切順利。
