|
Go podporuje vkládání (embedding) struktur a interface
pro plynulejší vyjádření skládání (composition) typů.
Nezaměňujte to s |
|
![]()
package main
|
|
import "fmt"
|
|
type base struct {
num int
}
|
|
func (b base) describe() string {
return fmt.Sprintf("base s num=%v", b.num)
}
|
|
|
|
type container struct {
base
str string
}
|
func main() {
|
|
|
Když vytváříme struktury pomocí literálů, musíme vložení inicializovat explicitně; jako název položky zde slouží vložený typ. |
co := container{
base: base{
num: 1,
},
str: "nějaké jméno",
}
|
|
K položkám |
fmt.Printf("co={num: %v, str: %v}\n", co.num, co.str)
|
|
Případně můžeme vypsat celou cestu pomocí názvu vloženého typu. |
fmt.Println("také num:", co.base.num)
|
|
Protože |
fmt.Println("describe:", co.describe())
|
type describer interface {
describe() string
}
|
|
|
Vkládání struktur s metodami se dá použít pro
propůjčení implementací interface jiným strukturám.
Tady vidíme, že |
var d describer = co
fmt.Println("describer:", d.describe())
}
|
$ go run struct-embedding.go
co={num: 1, str: nějaké jméno}
také num: 1
describe: base s num=1
describer: base s num=1
|
Další příklad: Generika (generics).