RM新时代网站-首页

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

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

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

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

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

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

泛型

以下是關(guān)于 Go 1.18 泛型的最明顯變化的列表,如需更全面的概述請參閱泛型提案,更詳細信息請參閱語言規(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ù)和類型可以通過在方括號中列出類型參數(shù)來實例化。

新標記~已添加到操作符和標點符號中。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

模糊測試

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

注意,模糊測試會消耗大量內(nèi)存,并且可能會影響機器運行時的性能。

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

編譯器

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

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

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

Bug fixes

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

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

Ports

AMD64

Go 1.18 引入了新的GOAMD64環(huán)境變量,它在編譯時選擇 AMD64 架構(gòu)的最低目標版本,允許的值為v1、 v2、v3或v4,默認是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ù)時遇到的一些細微的 bug,這些bug在很長一段時間內(nèi)會阻塞。

iOS

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

FreeBSD

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

性能提升

由于 Go1.17 中寄存器 ABI 調(diào)用約定擴展到了 RM64 / Apple M1 / PowerPC 64 架構(gòu),因此 Go1.18 對這幾個架構(gòu)包含了高達 20% 的 CPU 性能提升。該 Go 1.18 版本還包含其他大量更新項,完整更新列表請在發(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

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

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

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

    關(guān)注

    33

    文章

    8575

    瀏覽量

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

    關(guān)注

    2

    文章

    1499

    瀏覽量

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

    關(guān)注

    3

    文章

    4327

    瀏覽量

    62569

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

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

收藏 人收藏

    評論

    相關(guān)推薦

    INA333飽和后有什么特性?

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

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

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

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

    Go語言是谷歌發(fā)布的第二款開源編程語言,可以在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性,并專門針對多處理器系統(tǒng)應(yīng)用程序的編程進行了優(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語言簡介!GO是理想的編程語言嗎?

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

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

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

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

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

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

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

    詳解GO語言的趨勢與使用情況

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

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

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

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

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

    Go語言創(chuàng)始人反對在Go 1.18的標準庫中引入泛型支持

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

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

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

    Go 1.18 版本新功能解讀

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

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

    Go 來說,2022 是非常重要的一年,這一年??Go?發(fā)布了?Go 1.18?和?Go 1.
    的頭像 發(fā)表于 11-17 16:37 ?1230次閱讀
    RM新时代网站-首页