基于指针对象的办法
当调用一个函数时,会对其每个参数值进行拷贝,如果一个函数须要更新一个变量或者函数的其中一个参数切实太大咱们心愿可能防止进行这种默认拷贝,在这种状况下咱们就须要用到指针。对应到咱们这里用来更新接收器的对象的办法,当这个接收者变量自身比拟大时,咱们就能够用其指针而不是对象来申明办法
func (p *Point) ScaleBy (factory float64) { p.X *= factory p.Y *= factory}(*Point).ScaleByr := &Point{1,2}r.ScaleBy(2)fmt.Println(*r) // {2,4}
Nil也是一个非法的接收器类型
就像一些函数容许nil指针作为参数一样,办法实践也能够用nil指针作为其接收者。尤其当nil对于对象来说是非法的零值时,比方 Map 或者 slice。在上面的简答的int链表的例子里,nil代表的空链表。
type IntList struct { Value int Tail *IntList}func (list *IntList) Sum() int { if list == nil { return 0 } return list.Value + list.Tail.Sum()}