揚(yáng)帆大魚(yú)
2022-10-24 09:03:51
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)}上面的代碼將失敗并出現(xiàn)錯(cuò)誤cannot use one (type func() int) as type func() interface {} in argument to Fcannot use two (type func() A) as type func() interface {} in argument to F我的問(wèn)題是如何將具有任何可能輸出的函數(shù)作為參數(shù)傳遞?
1 回答

慕桂英3389331
TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊
可以將類(lèi)型的值int分配給interface{}變量;類(lèi)型的值func() int不能分配給類(lèi)型的值func() interface{}。任何版本的 Go 都是如此。
不過(guò),您可以使用 Go 1.18 來(lái)實(shí)現(xiàn)您嘗試做的事情,您可以在其中輕松地對(duì)函數(shù)進(jìn)行參數(shù)化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) // {}
}
游樂(lè)場(chǎng):https ://go.dev/play/p/zCB5VUhQpXE
- 1 回答
- 0 關(guān)注
- 141 瀏覽
添加回答
舉報(bào)
0/150
提交
取消