はじめに
本記事は以下のツイートの翻訳転載です。
メソッドチェーンについての内容になります。
メソッドチェーン
メソッドを定義する場合、レシーバをそのまま返してください。
これはメソッドチェーンとして知られています。
複数のメソッドを流れるように連続して呼び出すことができる方法を実現することができ、クリーンで効率的なコードを生み出すことができます。
おわりに
個人の感想ですが、メソッドチェーンを設計できていると「お、できるやつだ」ってなります。
また、構造体に対してファクトリ関数を用意しておくとよりクリーンに見えるかと思います。
type Person struct {
Name string
Age int
}
func NewPerson(name string, age int) Person {
return Person{
Name: name,
Age: age,
}
}
func (p Person) String() string {
return fmt.Sprintf("hi, i am %s and i am %d years old", p.Name, p.Age)
}
func (p Person) AddAge() Person {
p.Age++
return p
}
func (p Person) Rename(name string) Person {
p.Name = name
return p
}
func main() {
// hi, i am Aiden 2 and i am 31 years old
fmt.Println(
NewPerson("Aiden", 30).
AddAge().
Rename("Aiden 2"),
)
}