Go 部落格
Go 語言中新增泛型的提案
泛型提案
我們已提交了一份 Go 語言變更提案,旨在為型別和函式新增型別引數支援,從而允許一種形式的泛型程式設計。
為什麼選擇泛型?
泛型可以為我們提供強大的構建塊,使我們更容易共享程式碼和構建程式。泛型程式設計意味著編寫函式和資料結構,其中某些型別留待以後指定。例如,您可以編寫一個對任意資料型別切片進行操作的函式,其中實際資料型別僅在呼叫該函式時指定。或者,您可以定義一個儲存任何型別值的資料結構,其中要儲存的實際型別在建立資料結構例項時指定。
自 Go 於 2009 年首次釋出以來,對泛型的支援一直是請求最多的語言特性之一。您可以在一篇早期的部落格文章中閱讀更多關於泛型為何有用的內容。
儘管泛型有明確的使用案例,但將其乾淨地融入像 Go 這樣的語言是一項困難的任務。首次(有缺陷的)嘗試將泛型新增到 Go 可以追溯到 2010 年。在過去十年中還有其他幾次嘗試。
在過去的幾年裡,我們一直在研究一系列設計草案,最終形成了基於型別引數的設計。這份設計草案得到了 Go 程式設計社群的許多反饋,許多人使用泛型線上演練場進行了實驗,該演練場在一篇早期的部落格文章中有所描述。Ian Lance Taylor 在 GopherCon 2019 上發表了演講,討論了為什麼要新增泛型以及我們現在遵循的策略。Robert Griesemer 在 GopherCon 2020 上發表了後續演講,討論了設計和實現的變更。語言變更完全向後相容,因此現有的 Go 程式將繼續按原樣工作。我們認為設計草案已經足夠好、足夠簡單,可以提議將其新增到 Go 中了。
接下來會發生什麼?
語言變更提案流程是我們對 Go 語言進行變更的方式。我們現在已經啟動了這一流程,以將泛型新增到 Go 的未來版本中。我們歡迎實質性的批評和評論,但請儘量避免重複之前的評論,並請儘量避免簡單的“+1”和“-1”評論。相反,請對您同意或不同意的評論,或對整個提案,新增點贊/點踩表情符號反應。
與所有語言變更提案一樣,我們的目標是推動達成共識,要麼將泛型新增到語言中,要麼放棄該提案。我們理解,對於如此重大的變更,不可能讓 Go 社群中的每個人都滿意,但我們打算達成一個大家都能接受的決定。
如果提案獲得透過,我們的目標是在年底前提供一個完整(儘管可能尚未完全最佳化)的實現供大家嘗試,也許作為 Go 1.18 測試版的一部分。
下一篇文章:Go 中的命令 PATH 安全性
上一篇文章:Go on ARM 及更廣闊領域
部落格索引