Golang引入泛型:Go將Interface{}替換為“Any”

banq發表於2021-12-15

現在 Go 將擁有泛型:Go將Interface{}替換為“Any” ,這是一個型別別名:

 type any = interface{}

這會引入了泛型作好準備,實際上,帶有泛型的Go 1.18 Beta 1 已釋出

Go使用空的介面Interface{}來表示“任何型別”是一種巧妙的方式。空介面可以表示任何型別,因為每種型別都固有地實現了一個沒有方法的介面。這就是 Go 的全部內容——隱式實現介面。

一旦您開始使用泛型,會開始感受到在編寫 `interface{}` 的痛苦,尤其是在您處理這樣的函式時:

 func doSomething[X interface{}, Y Fooer[interface{}]](v X, src Y) error {
    }

使用any替代`interface{}`後就簡潔:

  func doSomething[X any, Y Fooer[any]](v X, src Y) error {
    }

之前C++、Java、JavaScript、Python、Ruby、Rust都支援泛型,現在Golang也加入泛型支援。

15年前Java沒有泛型支援時,程式碼是這麼寫的:

   List /* <String> */ values;
    Map /* <String, Object> */ map;

使用註釋註明集合型別,在Go 既沒有泛型也沒有聯合型別情況下,Go可能會這麼寫:

type fileOps []any // []T where T is (string | int64)

 

相關文章