継承が無いのは困った。共通メソッドとかどうすりゃええねん的な。 前回のダックタイピングって一体なんなのよ【golang】 - DRYな備忘録に引き続き、めっちゃ参考にしたのはこれ
golangはstructの定義にstructの定義を「埋め込む(embed)」ことができる。それはプロパティを持たせるのとは違う。(継承に近い、が、ダックタイピングと合い重なって色々できそうな予感ある)
package main import "fmt" type MyBase struct { count int } func (b *MyBase)Increment() int { b.count++ return b.count } type MyProperty struct { Value string } type AnotherPropery struct { AnotherValue string } type SubStruct struct { *MyBase SomePropery *MyProperty *AnotherPropery } func (s *SubStruct)IncrementByTwo() int { s.Increment() return s.Increment() } func main() { sub := &SubStruct{ &MyBase{0}, &MyProperty{"ほげ"}, &AnotherPropery{"ふがふが"}, } fmt.Println( sub.Increment(), sub.IncrementByTwo(), sub.IncrementByTwo(), sub.SomePropery.Value, sub.AnotherValue, ) }
結果
[21:51:20] → go run sample.go 1 3 5 ほげ ふがふが [21:51:24] →
- 継承は無いけど、structの定義の埋め込みがある
こういうことかな
DRYな備忘録