User Tools

Site Tools


snippets:golang:struct

struct

struct and inheritance example

snippet.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

Click to display ⇲

Click to hide ⇱

spot
my name is spot and I am a pointer
my name is spot
my name is spot and I am a pointer
snippets/golang/struct.txt · Last modified: by allspark