Go
golang

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())
    }
}

結果:

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