Go1-24 新特性:OS 新版本要求、Wasm 功能增強、template 支持迭代器等
大家好,我是煎魚。
新版本 Go1.24 在 2 月 11 號已經正式發佈,如果先前還沒有留到的同學,可以關注下是否跟進了。
先前我們已經更新了多篇新特性介紹。今天將會是最後一篇知識點的收尾。
操作系統要求
Linux 內核版本 >= 3.2
在本次 Go1.24 新版本開始,需要 Linux 內核 3.2 版本或更高版本(劃重點)。
如果公司裏的集羣環境歷史底蘊比較深的,建議升級前檢查一下。(我們就是,提前一個版本升級申請集羣升級了)
因爲 Linux 內核 3.19 是先前較爲常用的一個版本,可能有的集羣環境以前安裝了,就一直沒有再動。就需要提前安排升級。
macOS 版本要求
Go1.24 是能在 macOS 11 Big Sur 上運行的最後一個版本。Go1.25 需要 macOS 12 Monterey 或更高版本。
WebAssembly 功能增強
在 Wasm 發展歷程上,Go 在 1.11 版本首次添加了對編譯爲 Wasm 的支持,通過 js/wasm
端口實現。Go1.21 增加了一個新端口,針對 WASI preview 1
系統調用 API,即新的 GOOS=wasip1
端口。
本次 Go1.24 引入了 go:wasmexport
指令和構建 WebAssembly System Interface(WASI)反應器的能力,增強 Go 對 WebAssembly(Wasm)的進一步能力支持。
使用 go:wasmexport 導出 Go 函數
Go 1.24 引入了新的編譯器指令 go:wasmexport
,允許開發者將 Go 函數導出,以便從 Wasm 模塊外部調用,通常由運行 Wasm 運行時的主機應用調用。
該指令指示編譯器在生成的 Wasm 二進制中將被註釋的函數作爲 Wasm 導出。
要使用 go:wasmexport
指令,只需在函數定義上添加:
//go:wasmexport add
func add(a, b int32) int32 { return a + b }
這樣 Wasm 模塊將有一個名爲 add 的導出函數,可供主機調用。
這類似於 cgo 的導出指令,使函數可被 C 調用,但 go:wasmexport
使用了不同且更簡單的機制。
構建 WASI 反應器(Reactor)
WASI 反應器(Reactor)是一個持續運行的 WebAssembly 模塊,可多次被調用以響應事件或請求。與在主函數結束後終止的 “命令” 模塊不同,反應器實例在初始化後保持活躍,其導出功能仍然可訪問。
在 Go 1.24 中,可以使用 -buildmode=c-shared 構建 WASI 反應器:
$ GOOS=wasip1 GOARCH=wasm go build -buildmode=c-shared -o reactor.wasm
該構建標誌指示鏈接器不生成 _start
函數(命令模塊的入口點),而是生成 _initialize
函數,執行運行時和包的初始化,以及任何導出函數及其依賴項。在調用導出函數之前,必須先調用 _initialize
函數。
通過本次版本支持的新特性,Go 開發可以更輕鬆地創建和導出 Wasm 模塊,構建可擴展的應用程序,並與各種 Wasm 主機環境集成。
text/template 支持 range-over
在標準庫 text/template
中,原有提供:
{{range pipeline}} T1 {{end}}
但是在原有的 pipeline 中,值必須是 array、slice、map 或者是 channel。
在本次 Go1.24 中,將先前支持的 for-range 支持函數(迭代器)和整型迭代也支持到了模版庫裏。
math/rand 隨機數禁用全局種子
在 Go1.24 中,標準庫 math/rand
的全局函數 rand.Seed
將默認變爲 “無操作”(no-op),即調用此函數不再產生實際效果。
此行爲可通過 GODEBUG=randseednop=1
控制。若需恢復舊版行爲,可在代碼中添加 //go:debug randseednop=0
指令(此兼容性支持至少持續到 Go 1.27)。
如果後續需保持確定性隨機數行爲(如科學模擬),應替換 rand.Seed
的使用方式。
我們可以用 rsc 推薦的 r := rand.New(rand.NewSource(s))
代替 rand.Seed(s)
。
例如:
import mathrand "math/rand"
var rand = mathrand.New(mathrand.NewSource(seed))
該方式通過局部實例生成隨機數,規避全局狀態衝突。
總結
本次 Go1.24 新版本特性的系列基本已經完結,本次新版本還是帶來了許多新的創新小突破的。
歡迎大家有需要的同學可以儘快開始用起來。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/AnDpsx7WiJH7hsMH19bQng