在 Go 的泛型编程模型中,类型参数表示占位符类型,可以用具体类型实例化。但是,类型参数并不暗示其指针类型 (*T) 的任何特定属性或方法集。另一方面,约束定义了具体类型实现类型参数必须满足的要求。
错误“type T is point to当您尝试使用具体类型指针 (T) 上定义的方法作为类型参数方法集的一部分时,就会出现“类型参数,而不是类型参数”。这是因为类型参数及其指针类型是不同的实体。
要解决此问题,您可以显式声明需要具体类型在两者上实现方法的约束类型及其指针:
func Foo[T any, PT interface { SetId(string); *T}](v T) {}
实现约束时,确保方法被适当地声明。对于在 T 上声明 SetId 方法的 GS 接口,您应该使用 A 实例化 MyStore 并修改 MyStore 中字段的类型以匹配具体类型:
var storeA = &MyStore[*A]{} type MyStore[T GS] struct { values map[string]T } func (s *MyStore[T]) add(item T) {}
通过相应地细化约束和实现方法,您可以在 Go 代码中有效地利用泛型。
以上是为什么我不能在 Go 泛型中使用指向类型参数的指针上的方法?的详细内容。更多信息请关注PHP中文网其他相关文章!