ホームページ > バックエンド開発 > Golang > 特定のパラメータ型を持つ関数を Interface パラメータを受け入れる関数に渡すと、Go がエラーを報告するのはなぜですか?{}

特定のパラメータ型を持つ関数を Interface パラメータを受け入れる関数に渡すと、Go がエラーを報告するのはなぜですか?{}

DDD
リリース: 2024-12-25 13:03:10
オリジナル
463 人が閲覧しました

Why Does Go Report an Error When Passing a Function with a Specific Parameter Type to a Function Accepting an Interface{} Parameter?

インターフェイス パラメーターに互換性がない型関数

インターフェイスに準拠する任意の値を受け入れる関数型を定義する場合、混乱を招く可能性があります。その仕様に一致すると思われる関数を呼び出すとエラーが発生します。

次の点を考慮してください。例:

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート