This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| snippets:golang:struct [2018/03/20 11:31] – created allspark | snippets:golang:struct [2018/03/20 11:46] (current) – allspark | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ## struct | ||
| + | struct and inheritance example | ||
| + | |||
| + | ```go | ||
| + | package main | ||
| + | |||
| + | import ( | ||
| + | " | ||
| + | ) | ||
| + | |||
| + | type Speaker interface { | ||
| + | Speak() string | ||
| + | } | ||
| + | |||
| + | type Pet struct { | ||
| + | name string | ||
| + | } | ||
| + | |||
| + | type Dog struct { | ||
| + | Pet | ||
| + | Breed string | ||
| + | } | ||
| + | |||
| + | func (p *Pet) Play() { | ||
| + | fmt.Println(p.Speak()) | ||
| + | } | ||
| + | |||
| + | func (p *Pet) Speak() string { | ||
| + | return fmt.Sprintf(" | ||
| + | } | ||
| + | |||
| + | func (p *Pet) Name() string { | ||
| + | return p.name | ||
| + | } | ||
| + | |||
| + | func (d *Dog) Speak() string { | ||
| + | return fmt.Sprintf(" | ||
| + | } | ||
| + | |||
| + | func Speak(p Speaker) { | ||
| + | fmt.Println(p.Speak()) | ||
| + | | ||
| + | // | ||
| + | // p.Name undefined (type Speaker has no field or method Name) | ||
| + | } | ||
| + | |||
| + | func main() { | ||
| + | d := Dog{Pet: Pet{name: " | ||
| + | fmt.Println(d.Name()) | ||
| + | fmt.Println(d.Speak()) | ||
| + | d.Play() // p* is a Pet, p.Speak -> (p *Pet) Speak() | ||
| + | |||
| + | Speak(& | ||
| + | } | ||
| + | ``` | ||
| + | |||
| + | ### output | ||
| + | |||
| + | < | ||
| + | ``` | ||
| + | spot | ||
| + | my name is spot and I am a pointer | ||
| + | my name is spot | ||
| + | my name is spot and I am a pointer | ||
| + | ``` | ||
| + | </ | ||