Go のメソッド・インタフェース周り覚書き
Go にもだいぶ慣れてきたが、インタフェース周りがあやふやになる。 なのでひと目で理解できるように、ソースコードで覚書き(自分用)
package main import "fmt" type Profile struct { Name string Age int Height int Weight int } type Dog struct { Profile } type Person struct { Profile } type Animal interface { Eat() Run() Walk() Sleep() } func (dog Dog) Eat() { fmt.Println("mog-mog") } func (dog Dog) Run() { fmt.Println("Dash!!") } func (dog Dog) Walk() { fmt.Println("Peta-Peta") } func (dog Dog) Sleep() { fmt.Println("Zzz") } func (dog Dog) Bark() { fmt.Println("Wan-Wan!") } func (person Person) Eat() { fmt.Println("mog-mog") } func (person Person) Run() { fmt.Println("Dash!!") } func (person Person) Walk() { fmt.Println("Peta-Peta") } func (person Person) Sleep() { fmt.Println("Zzz") } func (person Person) Greet() { fmt.Println("Hello!!") } func RunAndWalk(animal Animal) { animal.Run() animal.Walk() } func EatAndSleep(animal Animal) { animal.Eat() animal.Sleep() } func NewDog(name string, age int, height int, weight int) Dog { return Dog{ Profile{ Name: name, Age: age, Height: height, Weight: weight, }, } } func NewPerson(name string, age int, height int, weight int) Person { return Person{ Profile{ Name: name, Age: age, Height: height, Weight: weight, }, } } func main() { pochi := NewDog("Pochi", 5, 70, 20) akira := NewPerson("Akira", 17, 171, 68) RunAndWalk(pochi) RunAndWalk(akira) EatAndSleep(pochi) EatAndSleep(akira) pochi.Bark() akira.Greet() }