Go 1.18 引入了泛型,它允许创建类型安全的代码。然而,某些行为可能与预期不同,例如逆变类型。
考虑 Go 1.18 中的以下函数:
此函数旨在将 left 的输出通过管道传递为输入到右边。但使用时却无法编译,如下所示:
这是因为编译器判定 T1 是 *os.File,虽然兼容,但与 io.Reader 并不相同。
所需的行为是将 Pipe 函数与接受兼容类型作为输入的函数链接起来。这与调用没有泛型的链时的预期行为一致。
问题:
答案:
解决方法:
虽然无法实现“编译时类型安全” " 行为,一种可能的解决方法是使用类型断言:
此代码在编译时不是类型安全的时间,但在某些情况下它可能会提供所需的功能。
以上是为什么 Go 1.18 泛型中 `Pipe` 函数无法与兼容类型编译?的详细内容。更多信息请关注PHP中文网其他相关文章!