七叶笔记 » golang编程 » Golang引入泛型:Go将Interface「」替换为“Any”

Golang引入泛型:Go将Interface「」替换为“Any”

现在 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)
  

文中链接见:

相关文章