在接口方法中使用类型参数
在尝试在 Go 中实现通用数据结构时,在定义迭代器接口时遇到错误使用带有类型参数的方法。本文解决了该问题并提供了解决方案。
接口定义错误
初始代码定义了一个接口,其中的方法采用函数类型参数,这导致错误:“函数类型不能有类型参数。”同样,将类型参数移至方法会导致错误:“方法不能有类型参数。”
解决方案:通用接口定义
按照错误提示, Methoden 不能有专用类型参数。相反,解决方案是在接口类型本身上指定类型参数。这使您能够在接口主体内的方法中使用类型参数。
更正的代码:
type Iterator[T any] interface { ForEachRemaining(action func(T) error) error // other methods }
使用在接口类型上定义的类型参数,您现在可以在预期的方法:
type MyIterator[T any] struct { // implementation of the iterator } func (i *MyIterator[T]) ForEachRemaining(action func(T) error) error { // implementation of the ForEachRemaining method using T return nil }
示例用法
以下示例演示了通用迭代器接口的用法:
package main import ( "fmt" "collection" ) type MyIterator[T any] struct { // implementation of the iterator } func (i *MyIterator[T]) ForEachRemaining(action func(T) error) error { // implementation of the ForEachRemaining method using T return nil } func main() { myIterator := &MyIterator[int]{} _ = myIterator.ForEachRemaining(func(num int) error { fmt.Println(num) return nil }) }
此代码定义了一个通用迭代器 MyIterator,并使用它来迭代整数切片,打印每个值。
以上是如何在Go接口方法中使用类型参数?的详细内容。更多信息请关注PHP中文网其他相关文章!