golang 1.19 工具、運(yùn)行時(shí)、庫(kù)、性能,改良版

前言

8 月 2 日,Go 團(tuán)隊(duì)發(fā)布了 Go 1.19,該版本主要是對(duì) Go 1.18 的改進(jìn)。Go 1.19 大部分更改都在工具鏈運(yùn)行時(shí)庫(kù)的實(shí)現(xiàn)中。與往常一樣,該版本保持了 Go 1 的兼容性承諾,幾乎所有 Go 程序都能像以前一樣繼續(xù)編譯和運(yùn)行。

語言

對(duì)方法聲明中類型參數(shù)的范圍進(jìn)行了修正,詳見 https://tip.golang.org/ref/spec#Declarations_and_scope。

Go 1.19 解決了一些泛型的問題,并且提升了泛型性能(某些泛型程序高達(dá) 20%)。

內(nèi)存模型

Go 內(nèi)存模型現(xiàn)在明確定義了 sync/atomic 包的行為。happens-before 關(guān)系的正式定義已被修改,以與 C、C++、Java、JavaScript、Rust 和 Swift 使用的內(nèi)存模型保持一致?,F(xiàn)有程序不受影響。隨著內(nèi)存模型的更新, sync/atomic 包中還有新的類型,例如 atomic.Int64atomic.Pointer[T],以便更容易使用原子值。

工具

文檔

文檔注釋現(xiàn)在支持鏈接、列表和更清晰的標(biāo)題語法。此更改有助于用戶編寫更清晰、更容易瀏覽的文檔注釋,尤其是在具有大型 API 的包中。作為此更改的一部分,gofmt 現(xiàn)在重新格式化文檔注釋以將標(biāo)準(zhǔn)格式應(yīng)用于這些功能的使用。有關(guān)所有詳細(xì)信息,可參閱 Go Doc Comments

新的 unix 構(gòu)建約束

unix 現(xiàn)在可以按 //go:build 行識(shí)別構(gòu)建約束。如果目標(biāo)操作系統(tǒng)(也稱為 GOOS)是 Unix 或類 Unix 系統(tǒng),則滿足約束。對(duì)于 1.19 版本,如果 GOOS 是 aix, android, darwin, dragonfly, freebsd, hurd, illumos, ios, linux, netbsd, openbsd, 或中的一個(gè)則滿足 solaris。在未來的版本中,該 unix 約束可能與其他新支持的操作系統(tǒng)相匹配。

庫(kù)

出于安全原因, os/exec 包不再遵循 PATH 查找中的相對(duì)路徑。有關(guān)詳細(xì)信息,可參閱 package 文檔。golang.org/x/sys/execabs 的現(xiàn)有用途可以在僅使用 Go 1.19 或更高版本構(gòu)建的程序中移回 os/exec。

運(yùn)行時(shí)

垃圾收集器增加了對(duì)軟內(nèi)存限制的支持,在新的垃圾收集指南中有詳細(xì)討論。該限制對(duì)于優(yōu)化 Go 程序以在具有專用內(nèi)存量的容器中盡可能高效地運(yùn)行特別有用。

動(dòng)態(tài)調(diào)整初始 goroutine 堆棧以減少堆棧復(fù)制

在大多數(shù) Unix 系統(tǒng)上自動(dòng)使用附加文件描述符。

在 ARM64 上添加了對(duì)調(diào)試器注入函數(shù)調(diào)用的支持,使用戶能夠在使用經(jīng)過更新以利用此功能的調(diào)試器時(shí),在交互式調(diào)試會(huì)話中從其二進(jìn)制文件調(diào)用函數(shù)。

Ports

Go 1.19 增加了對(duì)龍芯 64 位架構(gòu) LoongArch ( GOARCH=loong64) 和 RISC-V 上的 register ABI 支持 的支持。

編譯器

編譯器現(xiàn)在使用跳轉(zhuǎn)表來實(shí)現(xiàn)大整數(shù)和字符串 switch 語句。switch 語句的性能改進(jìn)各不相同,但可以快 20% 左右。(只支持 GOARCH=amd64GOARCH=arm64

Go 編譯器現(xiàn)在需要 -p=importpath 標(biāo)志來構(gòu)建可鏈接的目標(biāo)文件。這已經(jīng)由 go 命令和 Bazel 提供。任何其他直接調(diào)用 Go 編譯器的構(gòu)建系統(tǒng)都需要確保它們也傳遞了這個(gè)標(biāo)志。

Go 編譯器不再接受 -importmap 標(biāo)志。直接調(diào)用 Go 編譯器的構(gòu)建系統(tǒng)必須使用該 -importcfg 標(biāo)志。

小結(jié)

Go 1.19 是對(duì) Go 1.18 的改進(jìn)版,在工具鏈、運(yùn)行時(shí)庫(kù)都有提升,值得升級(jí)。有關(guān) 1.19 中所有內(nèi)容的更詳細(xì)說明,請(qǐng)參閱發(fā)行說明

參考鏈接

延伸閱讀

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容