Go 1.18 中即將出現的功能特性
- 原文地址:https://sebastian-holstein.de/post/2021-11-08-go-1.18-features/
- 原文作者:Sebastian Holstein
- 本文永久連結:https://github.com/gocn/translator/blob/master/2021/w44_upcoming_features_in_go_1.18.md
- 譯者:Cluas
Go 1.18 將是 Go 語言的一個重要版本,它將包含一些令我興奮的主要功能。即將到來的版本計劃在 2022 年初發布。第一個測試版應該會在一個月內推出。讓我們來提前看看將有哪些新功能被加入到這個版本中。
範型
期待已久的泛型支援將在 Go 1.18 中出現。Go 中缺乏泛型是開發者社群批評的最大問題。從設計階段到將在 Go 1.18 中出現的實際實現,花了好幾年時間。
這個話題太大,無法在這篇博文中詳細解釋。已經有很多關於它的好博文了。以下是我最喜歡的一篇,涵蓋了所有相關方面: https://bitfieldconsulting.com/golang/generics。 如果你想玩 Go 泛型,這裡有一個託管的 Go Playground 可供選擇。
工作空間(WORKSPACES)
工作區使開發者能夠更容易地同時處理多個模組的工作。在 Go 1.17 之前,這隻能通過go.mod
replace
指令來實現,如果你有很多模組在開發中,使用這個指令會很痛苦。同樣令人痛苦的是,每次你想提交你的程式碼時,你必須刪除replace
行,以便能夠使用一個模組的 穩定/釋出 版本。
有了工作區,這些開發情況的處理就簡單多了。一個名為go.work
的新檔案可以被新增到專案中,它包含了依賴模組的本地開發版本的路徑。go.mod
保持不動,不需要使用replace
指令。
go 1.17
directory (
./baz // contains foo.org/bar/baz
./tools // contains golang.org/x/tools
)
replace golang.org/x/net => example.com/fork/net v1.4.5
在通常的專案情況下,建議不要提交go.work
檔案,因為它的主要使用情況是本地開發。
如果你想在本地構建你的專案而不使用工作區功能,你可以通過提供以下命令列標誌來實現:
go build -workfile=off
通過像這樣執行go build
命令,你可以確保你的專案在構建時沒有依賴模組的本地開發版本。
官方模糊測試支援
在 Go 1.18 中也將提供正式的模糊測試支援。模糊功能將被視為實驗性的,API 還沒有被 Go 1 的相容性承諾所覆蓋。它應該作為一個概念驗證,Go 團隊請求社群提供反饋。
如果你還沒有聽說過模糊測試,測試版公告的博文對它進行了很好的描述:
模糊測試是一種自動化測試,它持續操縱程式的輸入,以發現問題,如 panic 或 bug。這些半隨機的資料突變可以發現現有單元測試可能遺漏的新的程式碼覆蓋範圍,並發現被忽略或者未被覆蓋的邊緣案例的錯誤。由於模糊測試可以接觸到這些邊緣案例,所以模糊測試對於發現安全隱患和漏洞特別有價值。
你可以在這裡閱讀 Katie Hockman 的設計文件。 還有Go Time 播客集,與 Katie 一起討論的這個話題。
新的軟體包 net/netip
新包net/netip
增加了一個新的 IP 地址型別,與net.IP
型別相比,它有很多優點。 簡單來說:它很小,可比較,而且沒有記憶體分配操作。 已經有一篇來自 Brad Fitzpatrick 的詳細博文介紹了所有的細節。如果你喜歡視訊,在Brad 在 FOSDEM 2021 的演講 中也有一段介紹,從時間 18:45 開始觀看。
更快的(?)go fmt 執行
go fmt
命令現在以並行方式執行格式化。正如Github issue中描述的那樣,格式化大型程式碼庫的速度應該會快很多。
但我很困惑為什麼在我的機器上進行第一次測試時沒有發現快很多,它變得更糟糕了。
我在我的 Macbook Pro 2019(2,6 GHz 6-Core Intel Core i7, 16 GB 2667 MHz DDR4) 的CockroachDB 倉庫上用以下命令進行測試:
time go test ./pkg/...
使用 Go 1.17,花了56 秒來格式化所有檔案。使用最新的gotip
版本,花了1 分 20 秒。我還不得不提高我機器上的 ulimit,以防止崩潰。讓我們看看這個功能在穩定版之前是如何發展的。
試用即將推出的特性功能
你也可以直接在你的機器上玩最新的實驗性 Go 版本gotip
。當你已經安裝了穩定版本的 Go,你只需要執行:
go install golang.org/dl/gotip@latest
gotip download
當安裝成功後,你可以像通常的go
命令一樣使用gotip
命令的所有子命令。
這篇博文並沒有涵蓋 Go 1.18 中的所有新功能。如果你想閱讀所有的錯誤修復和新功能特性,你可以在這裡看 Go 1.18 的問題列表。
文中提到的連結
- 範型 Go Playground https://go2goplay.golang.org/
- 模糊測試測試版本公告博文 https://go.dev/blog/fuzz-beta
- 模糊測試 Katie Hockman 的設計文件 https://go.googlesource.com/proposal/+/master/design/draft-fuzzing.md
- Go Time 播客集 https://changelog.com/gotime/187
- net/netip Brad Fitzpatrick 的詳細博文 https://tailscale.com/blog/netaddr-new-ip-type-for-go/
- Brad 在 FOSDEM 2021 的演講
- go fmt Github issue https://github.com/golang/go/issues/43566
- CockroachDB 倉庫 https://github.com/cockroachdb/cockroach
- Go 1.18 release issues (https://dev.golang.org/release#Go1.18)
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- Go 快速指南:go1.18 特性Go
- Go 1.18 正式釋出!Go
- Go1.18 新特性:新增好用的 Cut 方法Go
- JDK 16 即將釋出,新特性速覽!JDK
- Go1.18 新特性:編譯後的二進位制檔案,將包含更多資訊Go編譯
- 支援泛型的Go語言1.18釋出泛型Go
- Go1.18 新特性:引入新的 netip 網路庫Go
- GCC 6 即將帶來的新特性GC
- 即將釋出的ionic4有哪些激動人心的新特性
- go-carbon 2.1.0 版本釋出, 增加對 go1.18 版本的相容支援Go
- 官方解讀:TensorFlow 2.0中即將到來的所有新特性
- Go 創始人 Rob Pike 反對在 Go 1.18 標準庫中引入泛型支援:建議不要改動 Go 1.18 中的標準庫Go泛型
- 預計在 Go 1.18 中內建泛型Go泛型
- 注意:Go 1.18版本iota的bugGo
- Go 1.18泛型的侷限性初探Go泛型
- GCC 5 即將釋出GC
- HTTP/2 即將釋出HTTP
- 即將推出的 chrome 95 新特性❗ 從中我們能學到什麼❓Chrome
- Node.js陣營出現投奔Go的'叛將'Node.jsGo
- [譯] 即將到來的正規表示式新特性
- 火災現場,機器人小分隊即將出擊!機器人
- 新一代Java技術即將出現(轉)Java
- 史上體積最小、功能最多的VxRail即將上市!AI
- PHP6 中可能會出現的新特性PHP
- KDE Plasma 5.17 即將釋出ASM
- Android 4.2即將釋出Android
- Go1.18 新特性:棄用 strings.Title 方法,換個新坑吧!Go
- go 1.18 泛型初體驗Go泛型
- Go 1.18:工作區模式workspace modeGo模式
- Go 1.18 新特性多模組工作區教程-讓多模組開發變得簡單Go
- Go1.18 新特性:高效複製,strings, bytes 標準庫新增 Clone APIGoAPI
- go1.18泛型的簡單嘗試Go泛型
- squid-2.6即將釋出UI
- Go 1.16 新功能特性不完全前瞻Go
- iOS 11.4正式版即將釋出 兩大重要功能迴歸iOS
- YunOS飛輪設計概念機即將釋出 配指紋識別功能
- 學Java的同學看過來,JDK13即將釋出,新特性會是什麼?JavaJDK
- go1.18 安裝godoc報錯Go