使用介面參數鍵入func:變異數錯誤解釋
在Go 中,嘗試呼叫作為參數傳遞給另一個期望的函數的函數interface{} 類型可能會導致「無法使用a (type func(int)) 作為b 參數中的myfunc 類型」錯誤。此錯誤的出現是由於 Go 介面缺乏方差支援。
變異數
變異數是指子類型在任何需要其父類型的地方使用的能力。在協變類型系統中,子類型可以在輸入和輸出位置取代超類型。另一方面,逆變允許超類型取代輸入位置中的子類型。
Go 介面
Go 介面不顯示變異數。這意味著雖然 int 可以傳遞給需要 interface{} 的函數,但 func(int) 和 func(interface{}) 則不然。
理解錯誤
在提供的範例中,func(int)int 未實作func(interface{})int因為:
解
要解決該錯誤,您可以將func(int) 傳遞到需要interface{}的函數中,如以下所示以下程式碼:
package main import "fmt" func foo(x interface{}) { fmt.Println("foo", x) } func add2(n int) int { return n + 2 } func main() { foo(add2) }
以上是為什麼 Go 在使用具有介面參數的函數時會出現方差錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!