首页 >后端开发 >Golang >Go 泛型:为什么我不能将 `Props[Example]` 分配给 `Props[Generic]`?

Go 泛型:为什么我不能将 `Props[Example]` 分配给 `Props[Generic]`?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-28 16:47:13310浏览

Go Generics: Why Can't I Assign `Props[Example]` to `Props[Generic]`?

泛型类型参数不匹配:为什么赋值失败

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn