類型func 出現介面參數不相容錯誤
在Go 中,宣告一個型別函數來接受任何符合interface{} 的值來看起來很簡單。但是,呼叫作為遵循此類型規範的參數傳遞的函數會引發錯誤。
此錯誤源自於類型變異數的概念,特別是 Go 介面中缺乏協方差。雖然整數 (int) 可以傳遞給需要 interface{} 的函數,但同樣的原則不適用於函數。
具體來說,func(int) 和 func(interface{}) 不是相容的型別。儘管 int 符合 interface{},但 func(int) 不符合 func(interface{})。這是因為 Go 中的介面是不變的。
要解決此問題,請考慮將func(int) 傳遞給需要interface{} 的函數,如以下示例所示:
package main import "fmt" type myfunc interface{} func foo(x interface{}) { fmt.Println("foo", x) } func add2(n int) int { return n + 2 } func main() { foo(add2) }
在這個例子中,func(int )int實作了interface{},從而避免了類型不相容的錯誤。
以上是儘管 `int` 滿足 `interface{}`,為什麼 Go 不允許將 `func(int)` 傳遞給 `func(interface{})`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!