<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

Go 1.18 正式發布后有哪些特性

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

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

泛型

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

函數和類型聲明的語法,現在接受類型參數。

參數化函數和類型可以通過在方括號中列出類型參數來實例化。

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

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

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

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

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

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

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

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

當前的泛型實現具有以下已知限制:

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

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

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

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

不允許將類型參數或指向類型參數的指針作為結構類型中的未命名字段嵌入,同樣地,也不允許在接口類型中嵌入類型參數。

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

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

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

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

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

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

模糊測試

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

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

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

編譯器

現在編譯器可以內聯包含范圍循環或標記為循環的函數。

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

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

Bug fixes

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

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

Ports

AMD64

Go 1.18 引入了新的GOAMD64環境變量,它在編譯時選擇 AMD64 架構的最低目標版本,允許的值為v1、 v2、v3或v4,默認是v1。

RISC-V

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

Linux

Go 1.18 需要 Linux 內核版本 2.6.32 或更高版本。

Windows

windows/arm 和 windows/arm64 端在支持非合作搶占,有希望解決在調用 Win32 函數時遇到的一些細微的 bug,這些bug在很長一段時間內會阻塞。

iOS

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

FreeBSD

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

性能提升

由于 Go1.17 中寄存器 ABI 調用約定擴展到了 RM64 / Apple M1 / PowerPC 64 架構,因此 Go1.18 對這幾個架構包含了高達 20% 的 CPU 性能提升。該 Go 1.18 版本還包含其他大量更新項,完整更新列表請在發行公告(https://tip.golang.org/doc/go1.18)中查看。Go 1.18 相關鏈接

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正式發布!支持泛型、性能優化。..

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

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

    關注

    33

    文章

    7737

    瀏覽量

    148699
  • API
    API
    +關注

    關注

    2

    文章

    1396

    瀏覽量

    61031
  • 函數
    +關注

    關注

    3

    文章

    4042

    瀏覽量

    61390

原文標題:Go 1.18正式發布!支持泛型、性能優化...

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

收藏 人收藏

    評論

    相關推薦

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

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

    Go開發語言的優勢在哪里?

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

    CANopen網絡管理工具 V1.18

    CANopen網絡管理工具 V1.18 網絡管理工具
    發表于 11-15 17:12 ?74次下載

    無滯后有相控電路

    無滯后有相控電路
    發表于 02-20 21:33 ?487次閱讀
    無滯<b class='flag-5'>后有</b>相控電路

    nVIDIA Quadro4 Go GL顯示芯片

    nVIDIA Quadro4 Go GL顯示芯片  Quadro4 Go GL是nVIDIA公司在2002年4月23日為了對抗ATI公司Mobility FireGL 7800而發布的移動專業級顯示芯片,其中包括Qu
    發表于 01-22 11:43 ?656次閱讀

    GO語言簡介!GO是理想的編程語言嗎?

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

    谷歌發布Pixelbook Go筆記本,采用ChromeOS系統

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

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

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

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

    Go 語言簡單易學、性能優良。JetBrains Blog 發布Go 語言的調查報告,看看GO 語言當前趨勢吧!
    的頭像 發表于 03-17 11:05 ?2826次閱讀

    Go+1.0即將發布——讓改變發生

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

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

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

    七牛云發布Go+1.0,貢獻一行代碼,讓改變發生

    近日,七牛云提出了Go+靜態編程語言,正式發布了1.0版本并啟動了Go+開發者基金會。據媒體報道,七牛云此次發布Go+ 1.0能夠為大型工
    的頭像 發表于 11-26 12:39 ?828次閱讀
    七牛云<b class='flag-5'>發布</b><b class='flag-5'>Go</b>+1.0,貢獻一行代碼,讓改變發生

    Go并發模型的實現原理

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

    Go 1.18 版本新功能解讀

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

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

    Go 來說,2022 是非常重要的一年,這一年??Go?發布了?Go 1.18?和?Go 1.
    的頭像 發表于 11-17 16:37 ?915次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>