User Tools

Site Tools


snippets:golang:struct

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
snippets:golang:struct [2018/03/20 11:33] allsparksnippets:golang:struct [2018/03/20 11:46] (current) allspark
Line 1: Line 1:
 +## struct
  
 +struct and inheritance example
 +
 +```go
 +package main
 +
 +import (
 +        "fmt"
 +)
 +
 +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("my name is %v", p.name)
 +}
 +
 +func (p *Pet) Name() string {
 +        return p.name
 +}
 +
 +func (d *Dog) Speak() string {
 +        return fmt.Sprintf("%v and I am a %v", d.Pet.Speak(), d.Breed)
 +}
 +
 +func Speak(p Speaker) {
 +        fmt.Println(p.Speak())
 +        
 +        //p.Name() 
 +        //  p.Name undefined (type Speaker has no field or method Name)
 +}
 +
 +func main() {
 +        d := Dog{Pet: Pet{name: "spot"}, Breed: "pointer"}
 +        fmt.Println(d.Name())
 +        fmt.Println(d.Speak())
 +        d.Play() // p* is a Pet, p.Speak -> (p *Pet) Speak()   no cast to Dog
 +
 +        Speak(&d)
 +}
 +```
 +
 +### output
 +
 +<hidden>
 +```
 +spot
 +my name is spot and I am a pointer
 +my name is spot
 +my name is spot and I am a pointer
 +```
 +</hidden>