首页 > 后端开发 > Golang > Go 中的泛型如何处理具有基于指针的接口参数的函数?

Go 中的泛型如何处理具有基于指针的接口参数的函数?

Barbara Streisand
发布: 2024-12-29 00:36:09
原创
135 人浏览过

How Can Generics in Go Handle Functions with Pointer-Based Interface Parameters?

指针的通用接口

在 Go 中,可以通过泛型来定义指针实现的接口。考虑以下场景:

问题:

  • 您有一个带有方法 SomeMethod() 的接口 A。
  • 您有一个结构体实现 A 接口的指针 *Aimpl。
  • 您想要创建一个接受函数的通用函数 Handler带有 A 参数,并将指向 Aimpl 的指针分配给其参数。

使用带有类型参数的通用接口的解决方案:

要实现此目的,您可以使用类型参数声明 A 接口,确保实现类型是指向其类型的指针参数:

type A[P any] interface {
    SomeMethod()
    *P
}
登录后复制

然后,修改Handler的签名如下:

func Handler[P any, T A[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}
登录后复制

使用Wrapper接口的解决方案:

如果不能修改A的定义,可以将其包装到自己的接口中MyA:

type MyA[P any] interface {
    A
    *P
}
登录后复制

然后,更新Handler的签名以使用MyA接口:

func Handler[P any, T MyA[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}
登录后复制

以上是Go 中的泛型如何处理具有基于指针的接口参数的函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

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