基于指针对象的办法
当调用一个函数时,会对其每个参数值进行拷贝,如果一个函数须要更新一个变量
或者函数的其中一个参数切实太大咱们心愿可能防止进行这种默认拷贝,在这种
状况下咱们就须要用到指针。对应到咱们这里用来更新接收器的对象的办法,当这
个接收者变量自身比拟大时,咱们就能够用其指针而不是对象来申明办法
func (p *Point) ScaleBy (factory float64) {
p.X *= factory
p.Y *= factory
}
(*Point).ScaleBy
r := &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()}