LoginSignup
1
0

More than 5 years have passed since last update.

goで継承っぽいことをする

Posted at

goで継承っぽいことをやってみました。

作った例

MenとWomenは共通のプロパティとしてnameを持っており、共通のメソッドとしてWalk()を持つ。
また、MenはPower()メソッド、WomenはCook()メソッドをもつ。

ポイントとしてはMenとWomenの構造体が

  • プロパティのベースとなるHuman構造体
  • Men,Womenの振る舞いを定義したインタフェース

を含むようにして、継承っぽい雰囲気にしています。

package main

import "fmt"

type Human struct {
    name string
}

type Men struct {
    Human
    IMen
}

type Women struct {
    Human
    IWomen
}

type IHuman interface {
    Walk()
}

type IMen interface {
    IHuman
    Power()
}

type IWomen interface {
    IHuman
    Cook()
}

func (m *Men) Walk() {
    fmt.Printf("%vはてくてく歩く\n", m.name)
}

func (w *Women) Walk() {
    fmt.Printf("%vはてくてく歩く\n", w.name)
}

func (m *Men) Power() {
    fmt.Printf("%vは力持ち\n", m.name)
}

func (w *Women) Cook() {
    fmt.Printf("%vは料理上手\n", w.name)
}

func main() {
    takeshi := &Men{Human: Human{name: "takeshi"}}
    kasumi := &Women{Human: Human{name: "kasumi"}}

    takeshi.Walk()
    takeshi.Power()
    kasumi.Walk()
    kasumi.Cook()
}

// 結果
// takeshiはてくてく歩く
// takeshiは力持ち
// kasumiはてくてく歩く
// kasumiは料理上手

最後に

最近goを勉強し始めたばかりなので、上記のようなコードの場合、本来goならこう書くべき!みたいなのがあれば教えて欲しいです!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0