链式调用技术可以应用于函数(指针)接收器。为了说明这一点,让我们考虑一个 Person 结构
,它有两个函数 AddAge 和 Rename
,用于对其进行修改。
type Person struct {
Name string
Age int
}
func (p *Person) AddAge() {
p.Age++
}
func (p *Person) Rename(name string) {
p.Name = name
}
如果你想给一个人增加年龄然后给他们改名字,常规的方法是:
func main() {
p := Person{Name: "Aiden", Age: 30}
p.AddAge()
p.Rename("Aiden 2")
}
或者,我们可以修改AddAge 和 Rename
函数接收器,使其返回修改后的对象本身,即使它们通常不返回任何内容。
func (p *Person) AddAge() *Person {
p.Age++
return p
}
func (p *Person) Rename(name string) *Person {
p.Name = name
return p
}
通过返回修改后的对象本身,我们可以轻松地将多个函数接收器链在一起,而无需添加不必要的代码行:
p = p.AddAge().Rename("Aiden 2")