技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

embedded【Go】

他の言語における継承にあたるものです。
他で定義したtypeを中に取り込んで、新たなtypeを定義することができます。

type Vertex struct {
    x, y int
}

type Vertex3D struct {
    Vertex    // 継承
    z int
}

func NewVertex3D(x, y, z int) *Vertex3D {
    return &Vertex3D{Vertex{x, y}, z}    // type定義の際、「Vertex」と記載したため、型の定義に合わせる必要がある。
}

func (v *Vertex3D) Scale(i int) {
    v.x *= i
    v.y *= i
    v.z *= i
}

func (v *Vertex3D) Volume int {
    return v.x * v.y* v.z
}

func main() {
    v := NewVertex3D(2, 4, 7)
    v.Scale(3)
    fmt.Println(v.Volume())    // 1512
}


こんな形の継承も可能です。

type Int int

type VertexInt struct {
    Vertex
    Int
}

func NewVI(x, y, a int) *VertexInt {
    return &VertexInt{Vertex{x, y}, Int(a)}
}

func main() {
    a := NewVI(4, 5, 6)
    fmt.Println(*a)    // {{4 5} 6}
}