Edited at

interfaceをsliceで渡す抽象化方法

More than 1 year has passed since last update.

構造体を抽象化して処理させたい場合で、かつsliceで処理させる場合。

package main

import "fmt"

type PersonInterface interface {
Greet() string
}

type SalesPerson struct {
Name string
}

type Operator struct {
Name string
}

func (s *SalesPerson) Greet() string{
return "こんにちは、私は" + s.Name + "です"
}

func (o *Operator) Greet() string{
return "こんにちは、私は" + o.Name + "です"
}

func main(){
people := []PersonInterface{}

people = append(people, &SalesPerson{Name: "山田"})
people = append(people, &Operator{Name: "鈴木"})
Update(people)
}

func Update(people []PersonInterface){
for _, v := range people {
fmt.Println(v.Greet())
}
}

結果:

こんにちは、私は山田です

こんにちは、私は鈴木です