10.5 泛型接口

自 Go 1.18 以来,接口的语法已被概括。如我们之前所定义的,接口声明现在可以包括非接口类型的接口元素。

此外,Go 接口现在对应于类型集,而不是单个(可能是多态的)类型,这是 Go 1.18 之前基本接口的情况。

非基本接口只能用作通用类型约束或作为用作约束的其他接口的元素。

例子:

interface {
    ~int
    String() string
}

此接口表示所有具有基础类型 int 的类型,这些类型实现了 String 方法。(这实际上排除了内建的 int 类型,因为它没有实现 String 方法。)此接口不是基本接口,并且只能在通用类型约束的上下文中使用。

Go 的泛型目前有一些限制。例如,无法指定包括 ~string 类型或任何实现 String() string 方法的类型的通用类型约束。在上一个示例中,接口元素 ~int 和 String() string 被结合为交集,而不是并集。

最后更新于