如何在Go中传递泛型方法引用?(类似Java实现方式)
在Go中实现泛型解析函数的传递
Go没有Java那种函数式接口和方法引用的语法,但可以通过泛型函数类型结合泛型函数来实现你要的功能,以下是对应实现:
1. 定义泛型解析函数类型
对应Java的Parser<T>接口,Go里可以直接定义一个泛型函数类型,代表接收字符串、返回指定类型的函数:
type Parser[T any] func(string) T
2. 实现泛型的fetch函数
和Java的静态泛型方法对应,Go的泛型函数需要在函数名前声明类型参数:
func fetch[T any](parser Parser[T]) []T { // 模拟逻辑:读取行并解析 var result []T lines := []string{"line1", "line2"} // 替换为实际的行数据源 for _, line := range lines { parsed := parser(line) result = append(result, parsed) } return result }
3. 定义具体的解析函数和目标类型
对应Java的ParseFoo静态方法,先定义Foo类型,再写解析函数:
type Foo struct { // Foo的自定义字段,比如Name string、ID int等 } func ParseFoo(line string) Foo { // 自定义解析逻辑,从line中提取数据构造Foo实例 return Foo{} }
4. 调用fetch函数
Go中可以直接将匹配签名的函数作为参数传递,不需要额外的方法引用语法:
func main() { fooList := fetch(ParseFoo) // 后续使用fooList }
关键说明
- Go的泛型函数类型
Parser[T]直接替代了Java的Parser<T>接口,写法更简洁 - 传递函数时,Go会自动推导泛型类型参数
T(此处推导为Foo),无需显式指定;若需要显式声明,也可以写成fetch[Foo](ParseFoo)
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

