『每周譯Go』GO 1.18 中即將出現(xiàn)的功能特性
Go 1.18 將是 Go 語言的一個重要版本,它將包含一些令我興奮的主要功能。即將到來的版本計劃在 2022 年初發(fā)布。第一個測試版應(yīng)該會在一個月內(nèi)推出。讓我們來提前看看將有哪些新功能被加入到這個版本中。
范型
期待已久的泛型支持將在 Go 1.18 中出現(xiàn)。Go 中缺乏泛型是開發(fā)者社區(qū)批評的最大問題。從設(shè)計階段到將在 Go 1.18 中出現(xiàn)的實際實現(xiàn),花了好幾年時間。
這個話題太大,無法在這篇博文中詳細解釋。已經(jīng)有很多關(guān)于它的好博文了。以下是我最喜歡的一篇,涵蓋了所有相關(guān)方面:https://bitfieldconsulting.com/golang/generics。如果你想玩 Go 泛型,這里有一個托管的 Go Playground 可供選擇。
工作空間(WORKSPACES)
工作區(qū)使開發(fā)者能夠更容易地同時處理多個模塊的工作。在 Go 1.17 之前,這只能通過go.modreplace指令來實現(xiàn),如果你有很多模塊在開發(fā)中,使用這個指令會很痛苦。同樣令人痛苦的是,每次你想提交你的代碼時,你必須刪除replace行,以便能夠使用一個模塊的 穩(wěn)定/發(fā)布 版本。
有了工作區(qū),這些開發(fā)情況的處理就簡單多了。一個名為go.work的新文件可以被添加到項目中,它包含了依賴模塊的本地開發(fā)版本的路徑。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文件,因為它的主要使用情況是本地開發(fā)。
如果你想在本地構(gòu)建你的項目而不使用工作區(qū)功能,你可以通過提供以下命令行標志來實現(xiàn):
go?build?-workfile=off
通過像這樣運行go build命令,你可以確保你的項目在構(gòu)建時沒有依賴模塊的本地開發(fā)版本。
官方模糊測試支持
在 Go 1.18 中也將提供正式的模糊測試支持。模糊功能將被視為實驗性的,API 還沒有被 Go 1 的兼容性承諾所覆蓋。它應(yīng)該作為一個概念驗證,Go 團隊請求社區(qū)提供反饋。
如果你還沒有聽說過模糊測試,測試版公告的博文對它進行了很好的描述:
模糊測試是一種自動化測試,它持續(xù)操縱程序的輸入,以發(fā)現(xiàn)問題,如 panic 或 bug。這些半隨機的數(shù)據(jù)突變可以發(fā)現(xiàn)現(xiàn)有單元測試可能遺漏的新的代碼覆蓋范圍,并發(fā)現(xiàn)被忽略或者未被覆蓋的邊緣案例的錯誤。由于模糊測試可以接觸到這些邊緣案例,所以模糊測試對于發(fā)現(xiàn)安全隱患和漏洞特別有價值。
你可以在這里閱讀 Katie Hockman 的設(shè)計文檔。還有Go Time 播客集,與 Katie 一起討論的這個話題。
新的軟件包 net/netip
新包net/netip增加了一個新的 IP 地址類型,與net.IP類型相比,它有很多優(yōu)點。簡單來說:它很小,可比較,而且沒有內(nèi)存分配操作。已經(jīng)有一篇來自 Brad Fitzpatrick 的詳細博文介紹了所有的細節(jié)。如果你喜歡視頻,在Brad 在 FOSDEM 2021 的演講 中也有一段介紹,從時間 18:45 開始觀看。
更快的(?)go fmt 運行
go fmt命令現(xiàn)在以并行方式運行格式化。正如Github issue中描述的那樣,格式化大型代碼庫的速度應(yīng)該會快很多。
但我很困惑為什么在我的機器上進行第一次測試時沒有發(fā)現(xiàn)快很多,它變得更糟糕了。
我在我的 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,以防止崩潰。讓我們看看這個功能在穩(wěn)定版之前是如何發(fā)展的。
試用即將推出的特性功能
你也可以直接在你的機器上玩最新的實驗性 Go 版本gotip。當(dāng)你已經(jīng)安裝了穩(wěn)定版本的 Go,你只需要運行:
go?install?golang.org/dl/gotip@latest
gotip?download
當(dāng)安裝成功后,你可以像通常的go命令一樣使用gotip命令的所有子命令。
這篇博文并沒有涵蓋 Go 1.18 中的所有新功能。如果你想閱讀所有的錯誤修復(fù)和新功能特性,你可以在這里看 Go 1.18 的問題列表。
文中提到的鏈接
范性 Go Playground https://go2goplay.golang.org/ 模糊測試測試版本公告博文 https://go.dev/blog/fuzz-beta 模糊測試 Katie Hockman 的設(shè)計文檔 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 的演講(https://www.youtube.com/embed/csbE6G9lZ-U) 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)
原文地址:
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
想要了解關(guān)于 Go 的更多資訊,還可以通過掃描的方式,進群一起探討哦~
