ホームページ >バックエンド開発 >Golang >Go インターフェイス メソッドの戻り値の型によってコンパイル エラーが発生するのはなぜですか?

Go インターフェイス メソッドの戻り値の型によってコンパイル エラーが発生するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-09 22:38:02795ブラウズ

Why Does My Go Interface Method Return Type Cause a Compilation Error?

Go のインターフェースとしてのインターフェース メソッドの戻り型

質問:

インターフェースの実装Golang でインターフェイス型を返すメソッドを使用すると、コンパイル エラーが発生する可能性があります。次のコードを考えてみましょう:

type IA interface {
    FB() IB
}

type IB interface {
    Bar() string
}

type A struct {
    b *B
}

func (a *A) FB() *B {
    return a.b
}

type B struct{}

func (b *B) Bar() string {
    return "Bar!"
}

このコードを実行すると次のエラーが発生します:

cannot use a (type *A) as type IA in function argument:
    *A does not implement IA (wrong type for FB method)
        have FB() *B
        want FB() IB

解決策:

この問題を解決するには、FB メソッドの戻り値の型は、IA インターフェイスで指定された型と一致する必要があります。したがって、次の変更が必要です。

func (a *A) FB() IB {
    return a.b
}

この変更により、FB の戻り値の型が IA インターフェイスで定義されているように IB になるため、コードは正常にコンパイルされます。

追加の考慮事項:

IA インターフェイスと IB インターフェイスが別のパッケージで定義されている場合、パッケージのインポート ステートメントIB を含むファイルは、FB メソッドが実装されるファイルに含める必要があります。さらに、FB の戻り値の型は適切なパッケージ名で修飾する必要があります:

import (
    "foo" // Package containing IB interface
)

// Implementation in package bar
func (a *A) FB() foo.IB {
    return a.b
}

以上がGo インターフェイス メソッドの戻り値の型によってコンパイル エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。