ホームページ > バックエンド開発 > Golang > `int` が `interface{}` を満たしているにもかかわらず、`func(int)` を `func(interface{})` に渡すことが許可されないのはなぜですか?

`int` が `interface{}` を満たしているにもかかわらず、`func(int)` を `func(interface{})` に渡すことが許可されないのはなぜですか?

Barbara Streisand
リリース: 2024-12-29 18:41:11
オリジナル
606 人が閲覧しました

Why Doesn't Go Allow Passing `func(int)` to `func(interface{})` Despite `int` Satisfying `interface{}`?

インターフェイス パラメータ非互換性エラーのある型関数

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

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