Golang構造体埋め込みの使い方とコード例

Golang構造体埋め込みとは?

Golangでは、構造体を別の構造体に埋め込むことができます。これにより、埋め込まれた構造体のフィールドやメソッドが外部の構造体からアクセスでき、コードの再利用性と拡張性が向上します。

埋め込みの基本

まず、基本的な埋め込みの構文を見てみましょう。

type Parent struct {
    ParentField int
}

type Child struct {
    Parent // Parent構造体を埋め込む
    ChildField int
}

上記の例では、Child構造体がParent構造体を埋め込んでいます。これにより、Child構造体はParent構造体のフィールドにアクセスできます。

コード例1: 埋め込み構造体の初期化

c := Child{
    Parent: Parent{
        ParentField: 10,
    },
    ChildField: 20,
}
fmt.Println(c.ParentField) // 10
fmt.Println(c.ChildField) // 20

コード例2: メソッドのオーバーライド

func (p *Parent) Print() {
    fmt.Println("Parent Method")
}

func (c *Child) Print() {
    fmt.Println("Child Method")
}

c := Child{}
c.Parent.Print() // "Child Method"

コード例3: フィールド名の衝突の解決

type Parent struct {
    Field int
}

type Child struct {
    Parent
    Field int // 衝突するフィールド
}

c := Child{}
c.Parent.Field = 10   // ParentのFieldにアクセス
c.Child.Field = 20    // ChildのFieldにアクセス
fmt.Println(c.Field)  // ChildのFieldが優先される

コード例4: 埋め込みの無名構造体

type Parent struct {
    Field1 int
}

type Child struct {
    Parent struct {
        Field2 int
    }
    Field3 int
}

c := Child{}
c.Parent.Field1 = 10
c.Parent.Field2 = 20
c.Field3 = 30
fmt.Println(c.Field1) // 10
fmt.Println(c.Field2) // 20
fmt.Println(c.Field3) // 30

これらのコード例を使って、Golangの構造体埋め込みの基本を理解し、コードの再利用性と保守性を高める方法を探索してみてください。構造体埋め込みは、Go言語の強力な機能の一つで、効果的に活用することで、クリーンで効率的なコードを書くことができます。

タイトルとURLをコピーしました