メソッドチェイン 編集

Goのメソッドは、メソッドチェイン(method chaining)が可能です。

メソッドチェイン
package main

import "fmt"

type Student struct {
        name string
        age  int
}

func (s Student) PrintName() Student {
        fmt.Printf("Name: %v\n", s.name)
        return s
}

func (s Student) PrintAge() Student {
        fmt.Printf("Age: %v\n", s.age)
        return s
}

func main() {
        list := [...]Student{
                {name: "joe", age: 17},
                {name: "tom", age: 18},
                {name: "alice", age: 17},
        }

        for _, s := range list {
                s.PrintName().PrintAge()
        }
}
結果(例)
Name: joe
Age: 17
Name: tom
Age: 18
Name: alice
Age: 17

28行目がメソッドチェーンです。 メソッド PrintName() と PrintAge() とも戻り値はレシーバと同じ Student で、この様なメソッドは戻り値を次のメソッドのレシーバーにできます。 レシーバーと戻り値の型が一致していなくてもメソッドチェインは可能ですが、型の組合せを慎重に考える必要があります。

脚註 編集