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言語の強力な機能の一つで、効果的に活用することで、クリーンで効率的なコードを書くことができます。