Since Go doesn't have inheritance, we use composition instead.

Sample Code

package main
import "fmt"

type RegularHuman struct {
}

func (RegularHuman) chill() {
	fmt.Println("Chilling..")
}

type Ninja struct {
	human RegularHuman
}

func (n Ninja) chill() {
	n.human.chill()
}

func (Ninja) attack() {
	fmt.Println("Throwing ninja stars")
}

type SeniorNinja struct {
	ninja Ninja
	human RegularHuman
}

func (sn SeniorNinja) attack() {
	sn.ninja.attack()
	fmt.Println("Swinging ninja swords")
	sn.human.chill()
}


func main(){
    sn := SeniorNinja{}
	sn.ninja.attack()
	sn.ninja.chill()
}
  • No labels