インターフェイス パラメーターを含む型 func: 分散エラーの説明
Go では、別の関数に引数として渡された関数を呼び出そうとします。 Interface{} 型では、「b への引数では (type func(int)) を myfunc 型として使用できません」というエラーが発生する可能性があります。このエラーは、Go インターフェースでバリアンスのサポートがないために発生します。
バリアンス
バリアンスとは、サブタイプがそのスーパータイプが予期される場所で使用される機能を指します。共変型システムでは、入力位置と出力位置の両方でサブタイプがスーパータイプを置き換えることができます。一方、反分散により、スーパータイプが入力位置のサブタイプを置き換えることができます。
Go インターフェイス
Go インターフェイスは分散を示しません。これは、interface{} を期待する関数に int を渡すことはできますが、func(int) と func(interface{}) には同じことが当てはまらないことを意味します。
エラーについて
この例では、func(int)int は func(interface{})int を実装していません。なぜなら:
解決策
エラーを解決するには、次のように、インターフェイス{}を期待する関数に func(int) を渡します。次のコード:
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 中国語 Web サイトの他の関連記事を参照してください。