インターフェイス パラメータ非互換性エラーのある型関数
Go では、interface{} に準拠する任意の値を受け入れる型関数の宣言は簡単に見えます。ただし、この型の仕様に準拠する引数として渡された関数を呼び出すと、エラーが発生します。
このエラーは、型の分散の概念、特に Go のインターフェイスの共分散の欠如に起因します。整数 (int) は、interface{} を期待する関数に渡すことができますが、同じ原則は関数には当てはまりません。
具体的には、func(int) と func(interface{}) は互換性のない型です。 。 int は、interface{} に準拠しますが、func(int) は func(interface{}) に準拠しません。これは、Go のインターフェースが不変であるためです。
この問題を解決するには、次の例に示すように、インターフェース{}を期待する関数に func(int) を渡すことを検討してください。
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 がインターフェース{}を実装しているため、型の非互換性エラーが回避されます。
以上が`int` が `interface{}` を満たしているにもかかわらず、`func(int)` を `func(interface{})` に渡すことが許可されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。