可能有人會覺得Go泛型很難,因此想要借鑒其他語言(比如Java、NodeJS)的泛型實(shí)踐。事實(shí)上Go泛型很容易學(xué),本文希望能幫助讀者更好的理解Go泛型。
注:本文不會將 Go 泛型與其他語言的泛型實(shí)現(xiàn)進(jìn)行比較,但會幫助你理解 Go 泛型元素背后的上下文、結(jié)構(gòu)及其原理。
要編寫本文中的示例代碼,需要:
在 2020 年之前,Go泛型既是風(fēng)險(xiǎn)也是機(jī)遇。
當(dāng) Go 泛型在 2009 年左右被首次提出時(shí)(當(dāng)時(shí)該編程語言已經(jīng)公開),該特性是 Go 語言的主要弱點(diǎn)之一(Go 團(tuán)隊(duì)調(diào)查發(fā)現(xiàn))。
此后,Go 團(tuán)隊(duì)在 Go 草案設(shè)計(jì)中接受了許多泛型實(shí)現(xiàn),并在 Go 1.18 版本[2]中首次引入了泛型。
Go 博客 2020 調(diào)查結(jié)果
Go 2020 調(diào)查顯示,自 Go 語言誕生以來,Go 社區(qū)一直要求引入泛型功能。
Go 開發(fā)人員(以及 Go 團(tuán)隊(duì)成員)看到這一缺陷阻礙了 Go 語言的發(fā)展,同時(shí),如果得到修復(fù),Go將具有更大的靈活性和性能。
根據(jù)維基百科[3]的解釋,泛型編程是一種計(jì)算機(jī)編程風(fēng)格,在這種編程風(fēng)格中,算法的具體類型可以在以后指定。
簡單解釋一下:泛型是一種可以與多種類型結(jié)合使用的類型,泛型函數(shù)是一種可以與多種類型結(jié)合使用的函數(shù)。
?? 簡單提一下:盡管"泛型"在過去和現(xiàn)在都可以通過 interface{}、反射包或代碼生成器在 Go 中實(shí)現(xiàn),但還是要提一下在使用這三種方法之前需要仔細(xì)考慮。
為了幫助我們以實(shí)用的方式理解和學(xué)習(xí) Go 泛型,我們將在本文稍后部分提供示例代碼。
但要知道,既然 Go 泛型已經(jīng)可用,就可以消除模板代碼,不必?fù)?dān)心向后兼容問題,同時(shí)還能編寫可重用、類型安全和可維護(hù)的代碼。
簡而言之,最多可提高 20% 性能。
根據(jù) Go 博客的描述,Go 泛型為 Go 語言增加了三個(gè)主要組件:
從技術(shù)上講,早在 Go 泛型發(fā)布之前,Go 就有一些處理"泛型"的方法:
然而,與正式的Go泛型相比,這些方法還遠(yuǎn)遠(yuǎn)不夠,有如下缺點(diǎn):
本文鏈接:http://www.www897cc.com/showinfo-26-94852-0.html十分鐘了解 Golang 泛型
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com