capypad
0 Tage Serie
go / intermediate
Snippet

Komposition durch Struct-Embedding

Go verwendet Struct-Embedding, um Komposition zu erreichen. Wenn ein Typ ohne Feldnamen eingebettet wird, werden seine Methoden und Felder in das äußere Struct 'befördert', sodass direkt auf sie zugegriffen werden kann.

snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main
 
import "fmt"
 
type User struct {
ID int
Name string
}
 
func (u User) Greet() {
fmt.Printf("Hello, I am %s\n", u.Name)
}
 
type Admin struct {
User // Embedded field
Level int
}
 
func main() {
a := Admin{
User: User{ID: 1, Name: "Alice"},
Level: 10,
}
a.Greet() // Promoted method
fmt.Println("ID:", a.ID) // Promoted field
}
Erklärung
1
type Admin struct { User ... }
Bettet das User-Struct in Admin ein. Dies ist ein anonymes Feld.
2
a.Greet()
Ruft die Greet-Methode von User aufgrund der Beförderung direkt auf der Admin-Instanz auf.
3
a.ID
Greift direkt über die Admin-Instanz auf das ID-Feld von User zu.