首页 >后端开发 >Golang >如何在 Go 中为实现接口的指针创建通用类型?

如何在 Go 中为实现接口的指针创建通用类型?

Linda Hamilton
Linda Hamilton原创
2024-12-29 20:40:18394浏览

How to Create a Generic Type for a Pointer Implementing an Interface in Go?

实现接口的指针的通用类型

在 Go 中使用接口时,可能需要传入一个指向实现接口的结构体。这在定义泛型函数时可能具有挑战性。

问题:

如何为实现接口的指针创建泛型类型?

答案:

选项1:修改界面定义

  1. 使用类型参数声明接口,以指定其实现类型必须是指向其类型参数的指针:
type A[P any] interface {
    SomeMethod()
    *P
}
  1. 修改处理程序的签名:
func Handler[P any, T A[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}

选项 2:包装接口(如果无法修改定义)

  1. 创建一个嵌入接口的包装器接口原始接口并添加指向其类型的指针参数:
type MyA[P any] interface {
    A
    *P
}
  1. 修改处理程序的签名以接受包装的接口:
func Handler[P any, T MyA[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}

用法:

两个选项都允许传递一个指向实现泛型函数 A 接口的结构的指针处理程序。例如:

type Aimpl struct {}

func (a *Aimpl) SomeMethod() {}

func main() {
    Handler(func(a *Aimpl) { fmt.Printf("%#v\n", a) })
}

以上是如何在 Go 中为实现接口的指针创建通用类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

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