Go 部落格
Go 的 11 週年
今天我們歡慶 Go 開源釋出的第 11 個生日。我們為 Go 10 週年 舉辦的派對已彷彿是遙遠的回憶。這一年來十分艱辛,但我們讓 Go 的開發持續前進,並累積了不少亮點。
11 月時,我們在 Go 10 週年後不久推出了 go.dev 和 pkg.go.dev。
2 月時,Go 1.14 發行版 提供了第一個正式「準備就緒」的 Go 模組實作,並帶來許多效能改善,包括 加速 defer 和 非協力 goroutine 優先搶佔,用於減少排程和垃圾回收的延遲。
3 月初,我們推出了用於通訊協定的 新的 API,google.golang.org/protobuf,大幅改善了通訊協定反映和自訂訊息的支援。

當疫情爆發時,我們決定暫停任何公開的公告或於春季推出的服務,認識到每個人的注意力都理應集中在其他地方。但是我們持續地工作,並且我們團隊的一位成員加入了 Apple/Google 合作,一同致力於「保護隱私的曝光通知」privacy-preserving exposure notifications,以支援世界各地的接觸者追蹤工作。五月時,該聯盟推出了以 Go 編寫的「後端伺服器參考範例」reference backend server。
我們持續改進 gopls,這使得許多編輯程式都能支援進階的 感知 Go 的支援。六月時,VSCode Go 的擴充程式正式加入 Go 專案,而現在由與 gopls 協同作業的開發人員所維護。
同樣在六月,感謝大家的回饋,我們開放了 pkg.go.dev 背後的程式碼,而這也成為了 Go 專案的一部分。
六月下旬時,我們 發布了通用的最新設計草案,另外還有一個原型工具和 通用試玩區。
七月時,我們發布並討論了三個關於未來變更的新設計草案: 新的檔案選擇「//go:build」列、檔案系統介面 以及 建置時期檔案嵌入。 (我們會在 2021 年看到所有這些內容,如下所示。)
八月時,Go 1.15 版本 主要提供了最佳化和錯誤修正,而不是新功能。其中最重要的部分是連結器的重寫,這使得它執行速度快了 20%,並且對於大型建置來說平均可以使用少 30% 的記憶體。
上個月,我們執行了 年度 Go 使用者調查。分析完後我們會在部落格上發布結果。
Go 社群已經與其他所有人一樣適應了「虛擬優先」,並且我們在今年看到了許多虛擬聚會以及十多場虛擬 Go 研討會。上週,Go 團隊舉辦了 Google Open Source Live 的 Go 日 (影片連結於此)。
展望未來
我們對於 Go 的第 12 年非常興奮。在這週馬上就要到來的是 Go 團隊成員將在 GopherCon 2020 進行八場的展示。將這些活動標示在行事曆上吧!
- 「通用程式 Go」,Robert Griesemer 的演說,
美東時間 11 月 11 日上午 10:00; 上午 10:30 舉行問答。 - 「出乎意料時會發生什麼」,由錯碼偵錯專家小組(包含韓娜金)錄製的 Go time podcast。
11 月 11 日下午 12:00. - Michael Knyszek 發表的演講「演進 Go 記憶體管理員的 RAM 和 CPU 效率」。
11 月 11 日下午 1:00; 下午 1:50 舉行問答。 - Dan Scales 發表的演講「實作更快速的延遲」。
11 月 11 日下午 5:10; 下午 5:40 舉行問答。 - 與 Julie Qiu、Rebecca Stambler、Russ Cox、Sameer Ajmani 和 Van Riper 進行的現場問答「Go 團隊 - 有問必答」。
11 月 12 日下午 3:00. - Austin Clements 發表的演講「請勿中斷:Go 1.14 的迴圈優先搶佔」。
11 月 12 日下午 4:45; 下午 5:15 舉行問答。 - Jonathan Amsterdam 發表的演講「處理錯誤」。
11 月 13 日下午 1:00; 下午 1:50 舉行問答。 - Carmen Andoh 發表的演講「讓 Go 跨越鴻溝:突破兩百萬使用者並持續成長」。
11 月 13 日下午 5:55.
Go 版本
2 月時,Go 1.16 版本將包含新的 檔案系統介面 和 建置期間檔案內嵌 功能。它將完成連結器重寫,帶來更多效能改善。此外,它將包含對全新 Apple Silicon (GOARCH=arm64
) Mac 的支援。
8 月時,Go 1.17 版本無疑將帶來更多功能和改善,儘管它仍有相當距離,因此確切的詳細資訊仍未定案。它將包含 x86-64 的全新基於暫存器的呼叫慣例(不會影響現有的組譯!),這將讓整體的程式執行速度更快速。(其他架構將會在後續版本納入。)一項很棒且必定會納入的功能是 新的 //go:build
行,比起 目前的 //
+build
行,它更容易避免出錯。另一項備受期待的功能,我們希望可以在明年準備好進行 beta 測試,是 支援 go test
命令中的模糊測試。
Go 模組
在明年,我們將持續開發 Go 模組的支援,並將其更完善地整合到整個 Go 生態系統中。Go 1.16 將包含我們至今最流暢的 Go 模組體驗。我們最近調查的初步結果顯示,96% 的使用者已經採用 Go 模組(比一年前的 90% 成長)
我們也會在最後逐步支援基於 GOPATH 的開發:任何使用標準函式庫以外依賴項目的程式都需要 go.mod
。 (如果您尚未切換到模組,請參閱 GOPATH wiki 頁面,了解從 GOPATH 到模組歷程中的最後步驟詳細資訊。)
Go 模組的目標 從一開始就是「將套件版本的概念加入 Go 開發人員和我們工具的工作辭彙中」,以在整個 Go 生態系中深入支援模組以及版本。透過生態系全面瞭解套件版本,才能實現 Go 模組鏡像、檢查總和資料庫以及索引。在明年,我們將看到更豐富的模組支援加入更多工具和系統。舉例來說,我們計畫探討讓模組作者發佈新版本 (go release
) 以及協助模組使用者更新其程式碼以跳離已棄用 API (新的 go fix
) 的新工具。
以較大的例子來說,我們建立了 gopls 以減少編輯器用於支援 Go 的許多工具,其中沒有任何一個支援模組,進而將這些工具減少為單一支援模組的工具。明年,我們會準備讓 VSCode Go 擴充套件預設使用 gopls
,以提供即時無縫的模組體驗,且我們會發佈 gopls 1.0。當然,gopls 最棒的事情之一就是它的編輯器中立性:任何理解 語言伺服器協定 的編輯器都可以使用它。
版本資訊的另一個重要用途是追蹤建置中是否有任何套件具有已知漏洞。明年,我們計畫開發已知漏洞資料庫,以及讓你的程式根據此資料庫進行檢查的工具。
Go 套件探索網站 pkg.go.dev 是另一個受 Go 模組啟用的版本控管系統範例。我們一直專注於搞定核心功能和使用者體驗,包括 今日發布的重新設計。明年,我們會將 godoc.org 統一到 pkg.go.dev 中。我們也會擴充每個套件的版本時序,顯示每個版本的重大變更、已知漏洞等內容,以遵循整體目標,即浮出水面讓你了解必要資訊,以做出 關於加入依賴項目的明智決策。
我們很期待看到從 GOPATH 到 Go 模組的旅程即將完成,以及 Go 模組啟用所有優異的相依性感知工具。
泛型
接著大家最關注的功能當然是泛型。如同上面提到的,我們在 6 月發表了 泛型的最新設計草稿。自此之後,我們持續優化細節,並將注意力轉移到實作生產版本的功能上。我們將會在 2021 年持續努力,希望能於今年底提供大家版本讓大家試用,或許會是 Go 1.18 beta 版本的一部分。
感謝!
Go 遠遠不只是 Google 的 Go 團隊而已。我們非常感謝在 Go 發行版本和工具中與我們攜手合作的貢獻者。除此之外,Go 的成功要歸功於所有在 Go 蓬勃發展的生態系中工作並貢獻的人。在 Go 以外的世界這一年相當艱難。我們比以往更感謝你們花時間加入我們的行列,並協助 Go 獲得如此大的成功。謝謝你們。希望你們都能平安,並祝你們一切順利。
下一篇文章:將 godoc.org 請求重新導向至 pkg.go.dev
上一篇文章:Pkg.go.dev 有了新面貌!
部落格索引