0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Go 1.18 正式發(fā)布后有哪些特性

馬哥Linux運(yùn)維 ? 來源:OSC開源社區(qū) ? 作者:OSC開源社區(qū) ? 2022-03-30 17:50 ? 次閱讀

距離 Go 1.17 發(fā)布七個(gè)月后,Go 1.18 正式發(fā)布了!Go 1.18 是一個(gè)包含大量新功能的版本,包括對(duì)語言本身做了有史以來最大的改變(泛型)、工具鏈的實(shí)現(xiàn)、運(yùn)行時(shí)和庫(kù)的更改,還改善了性能。與往常一樣,該版本保持了 Go 1的兼容性承諾:幾乎所有 Go 程序都能像以前一樣繼續(xù)編譯和運(yùn)行。下面來看一下新版本的一些重大特性:

泛型

以下是關(guān)于 Go 1.18 泛型的最明顯變化的列表,如需更全面的概述請(qǐng)參閱泛型提案,更詳細(xì)信息請(qǐng)參閱語言規(guī)范。泛型提案:https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md語言規(guī)范:https://tip.golang.org/ref/spec

函數(shù)和類型聲明的語法,現(xiàn)在接受類型參數(shù)。

參數(shù)化函數(shù)和類型可以通過在方括號(hào)中列出類型參數(shù)來實(shí)例化。

新標(biāo)記~已添加到操作符和標(biāo)點(diǎn)符號(hào)中。

接口類型的語法現(xiàn)在允許嵌入任意類型(不僅僅是接口的類型名稱)以及 union 和 ~T 類型元素。,這樣的接口只能用作類型約束。

新的 預(yù)聲明標(biāo)識(shí)符 any是空接口的別名,可以用來代替 interface{}。

新的 預(yù)聲明標(biāo)識(shí)符 comparable是一個(gè)接口,表示可以使用==或者 != 比較的所有類型的集合,它只能用作(或嵌入)類型約束。

有三個(gè)使用泛型的實(shí)驗(yàn)包可能有用,這些包在 x/exp 存儲(chǔ)庫(kù)中;但它們的 API 不在 Go 1 兼容性承諾的保證范圍內(nèi):

golang.org/x/exp/constraints:對(duì)通用代碼有用的約束,例如 constraints.Ordered.

golang.org/x/exp/slices:對(duì)任何元素類型的切片進(jìn)行操作的通用函數(shù)集合。

golang.org/x/exp/maps:對(duì)任何鍵或元素類型的映射進(jìn)行操作的通用函數(shù)集合。

當(dāng)前的泛型實(shí)現(xiàn)具有以下已知限制:

Go 編譯器無法處理泛型函數(shù)或方法中的類型聲明,計(jì)劃在 Go 1.19 中取消這個(gè)限制。

Go 編譯器不接受具有預(yù)聲明函數(shù) real、imag 和 complex 的參數(shù)類型的參數(shù),計(jì)劃在 Go 1.19 中取消這個(gè)限制。

如果 m 由 P 的約束接口顯式聲明,Go 編譯器僅支持在類型參數(shù)類型 P 的值 x 上調(diào)用方法 m。類似地,方法值 x.m 和方法表達(dá)式 P.m 也僅在 m 由 P 顯式聲明時(shí)才受支持,即使 m 可能在 P 的方法集中,因?yàn)?P 中的所有類型都實(shí)現(xiàn)了 m,計(jì)劃在 Go 1.19 中取消這個(gè)限制。

Go 編譯器不支持訪問結(jié)構(gòu)字段 x.f,其中 x 是類型參數(shù)類型,即使類型參數(shù)的類型集中的所有類型都具有字段 f,計(jì)劃在 Go 1.19 中取消這個(gè)限制。

不允許將類型參數(shù)或指向類型參數(shù)的指針作為結(jié)構(gòu)類型中的未命名字段嵌入,同樣地,也不允許在接口類型中嵌入類型參數(shù)。

具有多個(gè) term 的 union 元素可能不包含具有非空方法集的接口類型。

泛型代表 Go 生態(tài)系統(tǒng)的巨大變化,雖然官方更新了幾個(gè)支持泛型的核心工具,但還有很多工作要做。剩余的工具、文檔和庫(kù)需要一些時(shí)間才能趕上這些語言變化。此外,官方公告中還有這么一段話:

可能會(huì)有一些使用泛型的代碼可以在 1.18 版本中使用,但在以后的版本中會(huì)中斷。

我們不計(jì)劃或期望做出任何此類更改,但是,由于我們今天無法預(yù)見的原因,可能需要在未來版本中破壞 1.18 的程序。

我們鼓勵(lì)在有意義的地方使用泛型,但在生產(chǎn)環(huán)境中部署泛型代碼時(shí),請(qǐng)謹(jǐn)慎行事。

(雖然泛型是搞出來了,但很可能有 Bug,不建議在生產(chǎn)中使用)

模糊測(cè)試

Go 1.18 包括 fuzzing(模糊測(cè)試) 的實(shí)現(xiàn),如 fuzzing 提案所述,詳情請(qǐng)參閱 fuzzing 教程(https://go.dev/doc/tutorial/fuzz)以開始使用。

注意,模糊測(cè)試會(huì)消耗大量?jī)?nèi)存,并且可能會(huì)影響機(jī)器運(yùn)行時(shí)的性能。

另請(qǐng)注意,模糊引擎在運(yùn)行時(shí)會(huì)將擴(kuò)展測(cè)試覆蓋率的值寫入模糊緩存目錄 $GOCACHE/fuzz。目前對(duì)可以寫入模糊緩存的文件數(shù)量或總字節(jié)數(shù)沒有限制,因此可能會(huì)占用大量存儲(chǔ)空間(可能為 GB 級(jí)別)。

編譯器

現(xiàn)在編譯器可以內(nèi)聯(lián)包含范圍循環(huán)或標(biāo)記為循環(huán)的函數(shù)。

編譯器的類型檢查器被完全替換以支持泛型,一些錯(cuò)誤消息可能使用與以前不同的措辭(提供更多詳細(xì)信息,或以更有用的方式表述)。

由于與支持泛型相關(guān)的編譯器的更改,Go 1.18 的編譯速度可能比 Go 1.17 的編譯速度慢大約 15%,代碼的執(zhí)行時(shí)間不受影響,目前計(jì)劃在 Go 1.19 中提高編譯器的速度。

Bug fixes

Go 1.18 編譯器可以正確地報(bào)告在函數(shù)文本中設(shè)置但從未使用過的變量的錯(cuò)誤(已聲明但未使用),解決了一個(gè)老問題 issue #8560 (https://golang.org/issue/8560)。

Go 1.18 編譯器現(xiàn)在在將如 ‘1’ 《《 32 之類的符文常量表達(dá)式作為參數(shù)傳遞給預(yù)聲明函數(shù) print 和 println 時(shí)會(huì)報(bào)告溢出。

Ports

AMD64

Go 1.18 引入了新的GOAMD64環(huán)境變量,它在編譯時(shí)選擇 AMD64 架構(gòu)的最低目標(biāo)版本,允許的值為v1、 v2、v3或v4,默認(rèn)是v1。

RISC-V

Linux 上的 64 位 RISC-V 架構(gòu)(linux/riscv64 端口)現(xiàn)在支持 c-archive 和 c-shared 構(gòu)建模式。

Linux

Go 1.18 需要 Linux 內(nèi)核版本 2.6.32 或更高版本。

Windows

windows/arm 和 windows/arm64 端在支持非合作搶占,有希望解決在調(diào)用 Win32 函數(shù)時(shí)遇到的一些細(xì)微的 bug,這些bug在很長(zhǎng)一段時(shí)間內(nèi)會(huì)阻塞。

iOS

在 iOS(ios/arm64 端口)和在基于 AMD64 的 macOS(ios/amd64 端口)上運(yùn)行的 iOS 模擬器上,Go 1.18 現(xiàn)在需要 iOS 12 或更高版本;已停止支持以前的版本。

FreeBSD

Go 1.18 是支持 FreeBSD 11.x 的最后一個(gè)版本,Go 1.19 需要 FreeBSD 12.2+ 或 FreeBSD 13.0+。

性能提升

由于 Go1.17 中寄存器 ABI 調(diào)用約定擴(kuò)展到了 RM64 / Apple M1 / PowerPC 64 架構(gòu),因此 Go1.18 對(duì)這幾個(gè)架構(gòu)包含了高達(dá) 20% 的 CPU 性能提升。該 Go 1.18 版本還包含其他大量更新項(xiàng),完整更新列表請(qǐng)?jiān)诎l(fā)行公告(https://tip.golang.org/doc/go1.18)中查看。Go 1.18 相關(guān)鏈接

https ://go.dev/dl/

https ://go.dev/doc/go1.18

https ://go.dev/blog/go1.18

https ://go.dev/blog/tutorials-go1.18

原文標(biāo)題:Go 1.18正式發(fā)布!支持泛型、性能優(yōu)化。..

文章出處:【微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:彭菁
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8254

    瀏覽量

    149942
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1461

    瀏覽量

    61488
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4235

    瀏覽量

    61964

原文標(biāo)題:Go 1.18正式發(fā)布!支持泛型、性能優(yōu)化...

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    INA333飽和后有什么特性?

    恢復(fù)時(shí)間,查看 數(shù)據(jù)手冊(cè) ,儀表運(yùn)放似乎就不存在一個(gè)飽和恢復(fù)時(shí)間參數(shù)。 現(xiàn)在請(qǐng)問下,INA是不是本來就沒有這個(gè)參數(shù)?還是INA就根本不允許飽和 ?飽和后有什么特性
    發(fā)表于 08-07 06:24

    【GoRK3288】1.Rockchip RK3288, GO!GO!!GO!!!

    語言是谷歌2009發(fā)布的第二款開源編程語言, 專門針對(duì)多處理器系統(tǒng)應(yīng)用程序的編程進(jìn)行了優(yōu)化,使用Go編譯的程序可以媲美C或C++代碼的速度,而且更加安全、支持并行進(jìn)程,而且可以在不損失應(yīng)用程序
    發(fā)表于 08-14 21:07

    Go開發(fā)語言的優(yōu)勢(shì)在哪里?

    Go語言是谷歌發(fā)布的第二款開源編程語言,可以在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性,并專門針對(duì)多處理器系統(tǒng)應(yīng)用程序的編程進(jìn)行了優(yōu)化,開發(fā)速度極快,可以與C或C++媲美,而且更加安全、支持并行
    發(fā)表于 03-22 15:04

    CANopen網(wǎng)絡(luò)管理工具 V1.18

    CANopen網(wǎng)絡(luò)管理工具 V1.18 網(wǎng)絡(luò)管理工具
    發(fā)表于 11-15 17:12 ?75次下載

    GO語言簡(jiǎn)介!GO是理想的編程語言嗎?

    技術(shù)實(shí)力毋容置疑,不過這哥倆都是玩Kernel的,經(jīng)歷相同,理念相近,分歧會(huì)比較少,他們也都坦承C用得最多最熟,所以注定了GO的類C特性,不過這會(huì)不會(huì)導(dǎo)致GO設(shè)計(jì)上的思維火花不足,對(duì)OOP以及現(xiàn)代編程思想的支持不足,亦未可知。
    的頭像 發(fā)表于 04-29 09:47 ?4267次閱讀
    <b class='flag-5'>GO</b>語言簡(jiǎn)介!<b class='flag-5'>GO</b>是理想的編程語言嗎?

    谷歌發(fā)布Pixelbook Go筆記本,采用ChromeOS系統(tǒng)

    10月15日消息,一年一度的谷歌新品發(fā)布會(huì)在美國(guó)紐約召開,谷歌正式發(fā)布了Pixelbook Go筆記本,繼續(xù)采用ChromeOS系統(tǒng)。起售價(jià)649美元。
    的頭像 發(fā)表于 10-16 15:36 ?3172次閱讀

    谷歌發(fā)布 Go 版本 Android 11,旨在為入門級(jí)設(shè)備提供手機(jī)體驗(yàn)

    Android 11 剛剛發(fā)布,谷歌的 Go 版本 Android 11 也緊隨其后。Android Go 版本最初于 2018 年推出,旨在為入門級(jí)設(shè)備提供智能手機(jī)體驗(yàn)。
    的頭像 發(fā)表于 09-11 14:26 ?3008次閱讀
    谷歌<b class='flag-5'>發(fā)布</b> <b class='flag-5'>Go</b> 版本 Android 11,旨在為入門級(jí)設(shè)備提供手機(jī)體驗(yàn)

    漢王科技發(fā)布“出頭鳥201”和“Go Go Bird 1000”系列仿生撲翼鳥

    漢王科技發(fā)布出頭鳥201和Go Go Bird 1000系列仿生撲翼鳥。 據(jù)介紹,Go Go Bird 1000是高仿真撲翼飛行器,從自然界
    的頭像 發(fā)表于 10-21 15:43 ?7387次閱讀

    詳解GO語言的趨勢(shì)與使用情況

    Go 語言簡(jiǎn)單易學(xué)、性能優(yōu)良。JetBrains Blog 發(fā)布Go 語言的調(diào)查報(bào)告,看看GO 語言當(dāng)前趨勢(shì)吧!
    的頭像 發(fā)表于 03-17 11:05 ?2964次閱讀

    Go語言憑借什么成為云原生第一語言的?

    發(fā)展勢(shì)頭強(qiáng)勁,憑借其簡(jiǎn)潔、高效的特性,在競(jìng)爭(zhēng)激烈的編程語言市場(chǎng)中占據(jù)了一席之地。 如果你對(duì) Go 的發(fā)展趨勢(shì)還不明朗的話,不妨仔細(xì)看看我后面說的。 據(jù) StackOverflow(全球最大的編程社區(qū)和問答網(wǎng)站)在前不久發(fā)布的一份
    的頭像 發(fā)表于 04-22 10:15 ?3070次閱讀
    <b class='flag-5'>Go</b>語言憑借什么成為云原生第一語言的?

    Go+1.0即將發(fā)布——讓改變發(fā)生

    10月15日,Go+1.0發(fā)布會(huì)將于上海召開,會(huì)上將發(fā)布Go+1.0的相關(guān)特性Go+的發(fā)展路線
    的頭像 發(fā)表于 10-11 14:49 ?1118次閱讀

    Go語言創(chuàng)始人反對(duì)在Go 1.18的標(biāo)準(zhǔn)庫(kù)中引入泛型支持

    近日,Go 語言創(chuàng)始人之一 Rob Pike 在 Github 上發(fā)表評(píng)論引發(fā)關(guān)注。據(jù)悉,他已在 Go 代碼倉(cāng)庫(kù)提交了一個(gè) issue (#48918),反對(duì)在 Go 1.18 的標(biāo)準(zhǔn)
    的頭像 發(fā)表于 10-26 09:45 ?1797次閱讀
    <b class='flag-5'>Go</b>語言創(chuàng)始人反對(duì)在<b class='flag-5'>Go</b> <b class='flag-5'>1.18</b>的標(biāo)準(zhǔn)庫(kù)中引入泛型支持

    Go并發(fā)模型的實(shí)現(xiàn)原理

    Go語言是為并發(fā)而生的語言,Go語言是為數(shù)不多的在語言層面實(shí)現(xiàn)并發(fā)的語言;也正是Go語言的并發(fā)特性,吸引了全球無數(shù)的開發(fā)者。
    的頭像 發(fā)表于 04-15 08:49 ?1267次閱讀

    Go 1.18 版本新功能解讀

    9 月 8 日,Go 語言社區(qū)發(fā)布 2022 年第二季度開發(fā)者調(diào)查報(bào)告,本次調(diào)研覆蓋 5752 位受訪開發(fā)者,主題涉及他們?cè)谑褂?Go 1.18 全新功能
    的頭像 發(fā)表于 09-15 09:45 ?1194次閱讀

    Go開源13周年 2022發(fā)布更多改變的Go 1.18Go 1.19版本

    Go 來說,2022 是非常重要的一年,這一年??Go?發(fā)布了?Go 1.18?和?Go 1.
    的頭像 發(fā)表于 11-17 16:37 ?1111次閱讀