如何将任何 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) // {}
}

https://gotipplay.golang.org/p/zCB5VUhQpXE