構造体を抽象化して処理させたい場合で、かつ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())
}
}
結果:
こんにちは、私は山田です
こんにちは、私は鈴木です