首页 > 后端开发 > Golang > 正文

为什么我不能在 Go 泛型中使用指向类型参数的指针上的方法?

Patricia Arquette
发布: 2024-11-04 21:54:01
原创
789 人浏览过

Why Can't I Use Methods on a Pointer to a Type Parameter in Go Generics?

Go 中的泛型:探索类型参数和约束

理解类型参数和约束

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板