泛型类型参数不匹配:为什么赋值失败
在 Go 中,尝试将 Props[Example] 类型的值赋给变量输入 Props[Generic] 将导致错误。这是因为,尽管示例实现了泛型接口,但使用不同类型参数实例化泛型类型会产生不同的命名类型。
使用泛型进行类型实例化
指定类型时泛型类型的参数,无论是在函数参数还是返回类型中,都会实例化一个新的、不同的类型。例如:
func Problem() Props[Generic] { return ExampleProps }
这一行使用类型参数 Generic 实例化 Props,得到 Props[Generic]。类似地,ExampleProps 使用类型参数 Example 进行实例化,生成 Props[Example].
类型不兼容性和赋值
As Props[Example] 和 Props[Generic]是两种不同的命名类型,即使用作参数的类型(例如,Example 和 Generic)满足赋值条件,例如实现接口。
这个概念类似于用 any 实例化的泛型。 any 是静态类型,是 interface{} 的别名,它与 T 或任何特定类型都不匹配。
解决问题
解决赋值错误在保持灵活性的同时,考虑使用类型参数实例化 Props:
type Props[G Generic] struct{ Value G } func Problem[T Generic](v T) Props[T] { return Props[T]{ Value: v } }
这允许您使用类型参数实例化 Props满足必要的约束并按预期使用返回值。
以上是Go 泛型:为什么我不能将 `Props[Example]` 分配给 `Props[Generic]`?的详细内容。更多信息请关注PHP中文网其他相关文章!