接口的通用和非通用使用有什么区别?

在新的类型参数设计草案中,您现在可以将接口约束应用于泛型函数:

func prettyPrint[T Stringer](s T) string {
    ...
}

但是,通过使用没有泛型的接口参数,这已经成为可能:

func prettyPrint(s Stringer) string {
    ...
}

使用第一个和使用第二个有什么区别?

回答

我假设这个问题是指类型参数提案的最新草案,它可能会在 1.18 中以 Go 结束。


第一个是参数多态性。编译器验证是否满足约束,然后生成采用静态已知类型的代码。重要的是,它不是盒装的。

第二个是运行时多态性。它采用在编译时未知的类型(唯一已知的是它实现了接口)并在盒装接口指针上工作。

撇开性能考虑不谈,在这种简单的情况下,您可以使用任何一种方法。泛型确实有助于解决当前工具无法正常工作的更复杂的情况。


以上是接口的通用和非通用使用有什么区别?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>