go语言学习笔记:基于指针对象的方法

这个真是很蛋痛的东西。很容易漏掉指针,导致它只是值传递!

看一下方法声明和基于指针对象的声明:

func (p Point) square() {
    p.x *= p.x    //这不会改变p的值,p是值拷贝的。调用的时候构造的一个临时变量
    p.y *= p.y
}

func (p *Point) square() {
    p.x *= p.x   //这会改变p的值,只是传递一个指针
    p.y *= p.y
}

而他们的调用方法没什么差异。 都可以使用p.square(),对于指针对象方法,编译器会自动把它变成((&p).square(),直接在代码中这样写也可以)。

 

posted @ 2017-11-28 11:29  你的KPI完成了吗  阅读(507)  评论(0)    收藏  举报