Go 部落格
為 Go 語言新增泛型的提案
泛型提案
我們已提交 一項 Go 語言變更提案,以增加對型別和函式的型別引數的支援,從而實現一種形式的泛型程式設計。
為什麼要使用泛型?
泛型可以為我們提供強大的構建塊,使我們能夠更輕鬆地共享程式碼和構建程式。泛型程式設計意味著編寫函式和資料結構,其中一些型別留待以後指定。例如,您可以編寫一個函式,該函式操作任意資料型別的切片,而實際的資料型別僅在呼叫函式時指定。或者,您可以定義一個儲存任何型別的值的資料結構,而要儲存的實際型別在建立該資料結構的例項時指定。
自 Go 於 2009 年首次釋出以來,對泛型的支援一直是人們最常要求的語言功能之一。您可以在 之前的部落格文章中瞭解更多關於泛型有用性的資訊。
儘管泛型有明確的用例,但將其整潔地整合到像 Go 這樣的語言中是一項艱鉅的任務。最早的 (有缺陷的)為 Go 新增泛型的嘗試可以追溯到 2010 年。在過去十年中,還有其他幾次嘗試。
在過去的幾年裡,我們一直致力於一系列設計草案,這些草案最終形成了 一個基於型別引數的設計。該設計草案得到了 Go 程式設計社群的大量投入,並且許多人使用 泛型遊樂場對其進行了實驗,該遊樂場在 之前的部落格文章中有介紹。Ian Lance Taylor 在 GopherCon 2019 上發表了 關於為什麼新增泛型以及我們目前遵循的策略的演講。Robert Griesemer 在 GopherCon 2020 上發表了 關於設計變更和實現的後續演講。語言更改是完全向後相容的,因此現有的 Go 程式將繼續按原樣執行。我們已經達到了一個階段,我們認為該設計草案足夠好,足夠簡單,可以提議將其新增到 Go 中。
接下來會發生什麼?
語言變更提案過程是我們對 Go 語言進行更改的方式。我們現在已經 啟動了該過程,以便在未來的 Go 版本中新增泛型。我們歡迎實質性的批評和評論,但請儘量避免重複先前的評論,並請儘量 避免簡單的“加一”和“減一”式評論。而是對您同意或不同意的評論,或對整個提案,新增 👍/👎 表情符號反應。
與所有語言變更提案一樣,我們的目標是達成共識,要麼將泛型新增到語言中,要麼放棄該提案。我們理解,對於如此規模的變更,不可能讓 Go 社群中的每個人都滿意,但我們打算達成一個每個人都願意接受的決定。
如果提案被接受,我們的目標將是在年底前提供一個完整(儘管可能不是完全最佳化)的實現,供人們試用,可能作為 Go 1.18 Beta 版的一部分。
下一篇文章:Go 中的命令 PATH 安全性
上一篇文章:Go 在 ARM 及其他平臺上的應用
部落格索引