合成を通じて継承のような動作を実現するにはどうすればよいでしょうか?

Mary-Kate Olsen
リリース: 2024-11-09 15:45:02
オリジナル
696 人が閲覧しました

How Can Go Achieve Inheritance-Like Behavior Through Composition?

Go の継承: 代替アプローチ

Go は継承よりも合成を重視しますが、同様の機能を実現するメカニズムを提供します。拡張可能なメソッドを備えた再利用可能な基本構造体を提供するための一般的な戦略は、埋め込みを利用することです。

親構造体のメソッドに依存する代わりに、埋め込まれた構造体は、囲んでいる構造体のコンテキスト内で独自のメソッドへのアクセスを提供します。 。その仕組みは次のとおりです。

// Define narrow interfaces
type MyReader interface {
    Read()
}

type MyWriter interface {
    Write()
}

// Create a composite interface
type MyReadWriter interface {
    MyReader
    MyWriter
}

// Create structs implementing the interfaces
type ReaderStruct struct {}
func (r *ReaderStruct) Read() {}

type WriterStruct struct {}
func (w *WriterStruct) Write() {}

// Embed the structs into a composite struct
type ReadWriterStruct struct {
    *ReaderStruct
    *WriterStruct
}

func (rw *ReadWriterStruct) DoStuff() {
    rw.Read()
    rw.Write()
}

func main() {
    rw := &ReadWriterStruct{}
    rw.DoStuff()
}
ログイン後にコピー

この例では、ReadWriterStruct は埋め込みにより Reader と Writer の両方として機能します。 Go は、構造体を継承するのではなく構造体を構成することにより、モジュール性と機能のカプセル化を促進します。

以上が合成を通じて継承のような動作を実現するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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