如何将任何 return 类型的 func 作为参数传递给另一个函数?
How to pass func with any return type as parameter into another function?
func F(f func()interface{})interface{} {
return f()
}
func one() int {
return 1
}
type A struct {}
func two() A {
return A{}
}
func main() {
a := F(one)
b := F(two)
}
上面的代码将因错误而失败
cannot use one (type func() int) as type func() interface {} in argument to F
cannot use two (type func() A) as type func() interface {} in argument to F
我的问题是如何传递一个带有任何可能输出的函数作为参数?
类型int
的值可以赋值给interface{}
变量;类型 func() int
的值不能 不能 分配给类型 func() interface{}
的值。任何版本的 Go 都是如此。
我想,您尝试做的事情可以通过 Go 1.18 实现,您可以在其中轻松地使用 T any
对函数进行类型参数化(顺便说一句 any
是 [=12= 的别名]):
func callf[T any](f func() T) T {
return f()
}
func one() int {
return 1
}
type A struct {}
func two() A {
return A{}
}
func main() {
a := callf(one)
b := callf(two)
fmt.Println(a) // 1
fmt.Println(b) // {}
}
func F(f func()interface{})interface{} {
return f()
}
func one() int {
return 1
}
type A struct {}
func two() A {
return A{}
}
func main() {
a := F(one)
b := F(two)
}
上面的代码将因错误而失败
cannot use one (type func() int) as type func() interface {} in argument to F
cannot use two (type func() A) as type func() interface {} in argument to F
我的问题是如何传递一个带有任何可能输出的函数作为参数?
类型int
的值可以赋值给interface{}
变量;类型 func() int
的值不能 不能 分配给类型 func() interface{}
的值。任何版本的 Go 都是如此。
我想,您尝试做的事情可以通过 Go 1.18 实现,您可以在其中轻松地使用 T any
对函数进行类型参数化(顺便说一句 any
是 [=12= 的别名]):
func callf[T any](f func() T) T {
return f()
}
func one() int {
return 1
}
type A struct {}
func two() A {
return A{}
}
func main() {
a := callf(one)
b := callf(two)
fmt.Println(a) // 1
fmt.Println(b) // {}
}