知識分享之Golang——Golang1.18正式發(fā)布泛型到來
背景
知識分享之Golang篇是我在日常使用Golang時學習到的各種各樣的知識的記錄派撕,將其整理出來以文章的形式分享給大家,來進行共同學習睬魂。歡迎大家進行持續(xù)關注终吼。
知識分享系列目前包含Java、Golang氯哮、Linux际跪、Docker等等。
開發(fā)環(huán)境
- 系統(tǒng):windows10
- 語言:Golang
- golang版本:1.18
內容
3月15號經歷了七個月喉钢,Go1.18版本發(fā)布了姆打,這個版本是一個重要的階段版本,我們最關注的泛型正式發(fā)布肠虽,同樣的這個版本依舊向下兼容幔戏,因此我們可以在現(xiàn)有的版本上直接進行安裝使用新版本。
以下是本次版本最明顯的變化列表税课,參見官方發(fā)布說明
- 函數(shù)和類型聲明的語法現(xiàn)在接受類型參數(shù)评抚。
- 參數(shù)化的函數(shù)和類型可以通過在它們后面加上方括號中的類型參數(shù)列表來實例化豹缀。
- 新的標記~被添加到操作符和標點符號集合中。
- 接口類型的語法現(xiàn)在允許嵌入任意類型(不僅僅是接口的類型名)以及聯(lián)合和~T類型元素慨代。這樣的接口只能用作類型約束邢笙。接口現(xiàn)在定義了一組類型和一組方法。
- 新的預先聲明的標識符any是空接口的別名侍匙。它可以用來代替接口{}氮惯。
- 新的預先聲明的標識符comparable是一個接口,它表示可以使用==或!=進行比較的所有類型的集合想暗。它只能作為(或嵌入)類型約束使用妇汗。
泛型的一些限制可以查看以下機翻:
當前的泛型實現(xiàn)具有以下已知限制:
- Go 編譯器無法處理泛型函數(shù)或方法中的類型聲明悲关。我們希望在 Go 1.19 中提供對此功能的支持腊满。
- realGo 編譯器不接受帶有預先聲明的函數(shù)蛮放、imag和 的參數(shù)類型的參數(shù)complex扑毡。我們希望在 Go 1.19 中取消這個限制。
- 如果由的約束接口顯式聲明抖所,Go 編譯器僅支持對類型參數(shù)類型m的值 調用方法饱搏。類似地叭披,方法值和方法表達式 也僅在由 顯式聲明時才受支持辽狈,即使由于所有類型都在implement 中可能位于方法集中慈参。我們希望在 Go 1.19 中取消這個限制。 xPmPx.mP.mmPmPPm
- Go 編譯器不支持訪問類型參數(shù) type 的結構字段x.f 刮萌,x即使類型參數(shù)的類型集中的所有類型都有一個 field f驮配。我們可能會在 Go 1.19 中刪除此限制。
- 不允許將類型參數(shù)或指向類型參數(shù)的指針作為未命名字段嵌入到結構類型中着茸。同樣壮锻,不允許在接口類型中嵌入類型參數(shù)。目前還不清楚這些是否會被允許涮阔。
- 具有多個術語的聯(lián)合元素可能不包含具有非空方法集的接口類型猜绣。目前還不清楚這是否會被允許。
- 泛型也代表了 Go 生態(tài)系統(tǒng)的巨大變化澎语。雖然我們更新了幾個支持泛型的核心工具途事,但還有很多工作要做验懊。剩余的工具擅羞、文檔和庫需要時間才能趕上這些語言變化。
以上是其官方機翻后的主要更新內容义图,下一節(jié)我們將進行編寫一些案例進行使用泛型减俏,并分析哪些場景下我們需要用到這一個特性。
本文聲明:
知識共享許可協(xié)議
本作品由 cn華少 采用 知識共享署名-非商業(yè)性使用 4.0 國際許可協(xié)議 進行許可碱工。