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

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

Barbara Streisand
Barbara Streisand原创
2024-12-29 00:36:09134浏览

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

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