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
我的問題是如何將帶有任何可能輸出的 func 作為引數傳遞?
uj5u.com熱心網友回復:
一個型別的值int可以賦給一個interface{}變數;型別的值func() int可以不被分配給型別的值func() interface{}。任何版本的 Go 都是如此。
想,您嘗試做的事情可以使用 Go 1.18 來實作,您可以在其中輕松地對函式進行型別引數化T any(順便說一句any是 的別名interface{}):
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/396645.html
上一篇:使用泛型型別不匹配
下一篇:打字稿如何從類建構式引數推斷型別
