インターフェイス パラメーターに互換性がない型関数
インターフェイスに準拠する任意の値を受け入れる関数型を定義する場合、混乱を招く可能性があります。その仕様に一致すると思われる関数を呼び出すとエラーが発生します。
次の点を考慮してください。例:
type myfunc func(x interface{}) func a(num int) { return } func b(f myfunc) { f(2) return } func main() { b(a) // error: cannot use a (type func(int)) as type myfunc in argument to b return }
Go のインターフェースが 不変性 を示すためにエラーが発生します。つまり、インターフェースを期待する関数に int を渡すことはできますが、同じことは当てはまりません。{} func(int) および func(interface{}).
Go では、互換性のある型を持つ関数は、同じパラメーターと戻り値の型を持つ必要があります。 func(int) と func(interface{}) はこの要件を満たしていないため、Go はそれらを互換性がないと認識します。
この問題を解決するには、次のアプローチの使用を検討してください。
package main import "fmt" func foo(x interface{}) { fmt.Println("foo", x) } func add2(n int) int { return n + 2 } func main() { foo(add2) }
この例では、func(int)int が、interface{} を期待する関数に渡されます。 func(int)int は指定された入力および戻り値の型を持つ単一のメソッドを持つ必要があるインターフェース{}を実装しているため、これが許可されます。
Go における分散のより詳細な説明については、Wikipedia の記事を参照してください。件名と、提供された回答にリンクされているブログ投稿。
以上が特定のパラメータ型を持つ関数を Interface パラメータを受け入れる関数に渡すと、Go がエラーを報告するのはなぜですか?{}の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。