Go 14周年
原文在這里。
由 Russ Cox, for the Go team 發(fā)布于2023年11月10日
今天,我們慶祝Go開源發(fā)布的第十四個生日!Go在過去一年里取得了巨大的進(jìn)展,發(fā)布了兩個功能豐富的版本,并實(shí)現(xiàn)了其他重要的里程碑。
我們發(fā)布了Go 1.20 in February和Go 1.21 in August,主要側(cè)重于實(shí)現(xiàn)改進(jìn)而非引入新的語言變化。
Go 1.20中預(yù)覽的Profile-guided optimization(PGO)在Go 1.21中正式發(fā)布,允許Go編譯器讀取程序的性能分析數(shù)據(jù),然后花更多時間優(yōu)化程序中運(yùn)行頻率最高的部分。在Go 1.21中,啟用PGO通常可以提升2%到7%的CPU利用率。有關(guān)概述,請參閱“Go 1.21中的Profile-guided optimization”,有關(guān)完整文檔,請參閱“Profile-guided optimization用戶指南”。
自Go 1.2版本以來,Go一直支持在go test期間收集覆蓋率分析數(shù)據(jù)。而Go 1.20版本新增了在通過go build構(gòu)建的可執(zhí)行文件中收集覆蓋率分析數(shù)據(jù)的支持,這意味著你可以在更大規(guī)模的集成測試中進(jìn)行覆蓋率分析。有關(guān)詳細(xì)信息,請參閱“Go集成測試的代碼覆蓋率”文章。
自從“Go 1和Go程序的未來”以來,兼容性一直是Go的重要組成部分。Go 1.21通過擴(kuò)展GODEBUG的使用約定進(jìn)一步提高了兼容性,特別是在需要進(jìn)行更改(例如重要的錯誤修復(fù)),但這種更改可能會破壞現(xiàn)有程序的情況下。有關(guān)概述,請參閱博文“向后兼容性,Go 1.21和Go 2”,有關(guān)詳細(xì)信息,請參閱文檔“Go、向后兼容性和GODEBUG”。
Go 1.21還引入了內(nèi)置的工具鏈管理支持,允許您像更改其他依賴項(xiàng)的版本一樣輕松地更改特定模塊中使用的Go工具鏈版本。有關(guān)概述,請參閱博文“Go 1.21中的向前兼容性和工具鏈管理”,有關(guān)詳細(xì)信息,請參閱文檔“Go工具鏈”。
另一個重要的工具成就是將磁盤索引集成到gopls,即Go的LSP服務(wù)器。這在典型用例中將gopls的啟動延遲和內(nèi)存使用降低了3-5倍。有關(guān)技術(shù)細(xì)節(jié),請參閱“為不斷增長的Go生態(tài)系統(tǒng)擴(kuò)展gopls”文章。您可以通過運(yùn)行以下命令來確保您正在運(yùn)行最新版本的gopls:
$ go install golang.org/x/tools/gopls@latest
Go 1.21引入了新的cmp、maps和slices包,這是Go的第一個通用標(biāo)準(zhǔn)庫,同時也擴(kuò)展了可比較類型的集合。有關(guān)詳細(xì)信息,請參閱博文“所有可比較類型”。
總的來說,我們繼續(xù)完善泛型,并通過演講和博客文章來解釋重要的細(xì)節(jié)。今年的兩篇重要文章分別是“拆解類型參數(shù)”和“關(guān)于類型推斷,你想知道的都在這里”。
Go 1.21中的另一個重要新包是log/slog,它為標(biāo)準(zhǔn)庫添加了用于結(jié)構(gòu)化日志記錄的官方API。請參閱“使用slog進(jìn)行結(jié)構(gòu)化日志記錄”以獲取概述。
對于WebAssembly(Wasm)端口,Go 1.21支持在WebAssembly System Interface(WASI)預(yù)覽1上運(yùn)行。WASI預(yù)覽1是WebAssembly的一個新“操作系統(tǒng)”接口,受到大多數(shù)服務(wù)器端Wasm環(huán)境的支持。請查看“Go中的WASI支持”以獲取詳細(xì)信息。
在安全方面,我們繼續(xù)確保Go引領(lǐng)著幫助開發(fā)人員了解其依賴關(guān)系和漏洞的道路,Govulncheck 1.0于7月發(fā)布。如果您使用VS Code,可以使用Go擴(kuò)展直接在編輯器中運(yùn)行g(shù)ovulncheck,詳細(xì)配置參見這個教程。如果您使用GitHub,您可以使用GitHub Action for govulncheck在CI/CD中運(yùn)行g(shù)ovulncheck。有關(guān)檢查漏洞問題的依賴關(guān)系的更多信息,請參閱今年的Google I/O演講“使用Go和Google構(gòu)建更安全的應(yīng)用程序”。
另一個重要的安全里程碑是Go 1.21的高度可復(fù)制的工具鏈構(gòu)建。有關(guān)詳細(xì)信息,請參閱“完全可重現(xiàn)的驗(yàn)證Go工具鏈”,其中包括在無需使用任何Linux工具情況下,在Mac上復(fù)制Ubuntu Linux Go工具鏈的演示。
今年真的是碩果累累!!!
在接下來的第15年,我們將繼續(xù)努力使Go成為規(guī)模化軟件工程的最佳環(huán)境。我們特別興奮的一項(xiàng)變化是重新定義for循環(huán)的:=語義,以消除意外別名錯誤的可能性。有關(guān)詳細(xì)信息,請參閱“在Go 1.22中修復(fù)for循環(huán)”文章,其中包括在Go 1.21中預(yù)覽此更改的說明。
致謝
Go項(xiàng)目一直不僅僅是我們在Google Go團(tuán)隊(duì)的工作。感謝所有的貢獻(xiàn)者和Go社區(qū)的每一位成員,使Go成為今天的樣子。我們祝愿大家在未來的一年里一切順利。
聲明:本作品采用署名-非商業(yè)性使用-相同方式共享 4.0 國際 (CC BY-NC-SA 4.0)進(jìn)行許可,使用時請注明出處。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 戀水無意
總結(jié)
- 上一篇: NLP技术如何为搜索引擎赋能
- 下一篇: 手撕Vuex-安装模块数据