Go言語に継承は無いんですか【golang】 - DRYな備忘録

継承が無いのは困った。共通メソッドとかどうすりゃええねん的な。 前回のダックタイピングって一体なんなのよ【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の定義の埋め込みがある

こういうことかな

f:id:otiai10:20140115215611j:plain

DRYな備忘録