官方在部落格更新了Go泛型(Generics)目前的開發狀態,除了持續對泛型設計草案進行修改之外,官方也開發了一個類型檢查器,這個程式可以按泛型草案設計,解析使用泛型的Go程式碼,並回報相關的類型錯誤。

泛型是Go社群中不少成員一直要求的功能,在今年4月官方釋出的社群大調查,其中有79%的受訪者認為,Go的痛點在於缺乏泛型這個關鍵功能。而Go要不要有泛型這個功能,早在幾年前就開始討論,2018年官方甚至啟動草稿設計發想,把泛型作為示範提案,丟出來供大家討論。

由於官方認為泛型雖然會為Go帶來許多靈活性,但同時也會讓Go變得複雜許多,因此對於泛型的設計持謹慎的態度,不停地進行調整。官方提到,他們最新發布的設計草案,最大的改變是放棄契約設計,原因是契約和介面類型之間的差異讓開發者困惑,因此官方消除了其中的差異,讓設計更簡單易懂,現在類型參數受介面類型限制,而介面類型包含類型列表,在之前的設計草案,類型列表則是屬於契約的功能。

而為了讓設計草案更佳完善,官方發布了轉換工具,讓開發者能以當前泛型設計草案,進行類型檢查並且執行程式碼,這項工具會將泛型程式碼轉換成一般Go程式碼,官方提到,雖然這個轉換程式有其限制,但是希望透過這個工具,讓開發者更加認識泛型,另外,官方提到,將來當泛型功能被正式接受之後,其實際的實作將會與現在有所不同。

開發者可以在Playground特別版本試用這個工具,該Playground與一般的Playground相同,只是多支援泛型,另外,開發者也可以自己建置該工具,相關程式碼可在Go主要儲存庫的分支中找到。

透過釋出泛型設計草案以及轉換工具,官方希望社群能夠感受泛型功能,對當前的泛型設計提供看法,官方也一再提醒,儘管社群不少人都認為Go需要泛型,但究竟在哪些方面上,真的需要使用泛型,官方希望可以透過討論讓這個問題更清晰明確。

而之後Go泛型功能的發展,要視社群回饋的狀態,官方提到,當設計草案普遍受社群接受,且不需要進行重大更改,那下一步就會進到正式的語言更改提案,最快Go 1.17就會加入泛型,該版本會在2021年8月發布,不過這僅是以最理想的狀態推測,一旦過程中需要討論與修改,那就會需要更久的時間。


Advertisement

更多 iThome相關內容