2018-09-20 Go学习拾贝

2018-11-07  本文已影响0人  linanwx

Go的指针与值在作为接受者和参数时的表现不同

方法与指针重定向
比较前两个程序,你大概会注意到带指针参数的函数必须接受一个指针:

var v Vertex
ScaleFunc(v, 5) // 编译错误!
ScaleFunc(&v, 5) // OK
而以指针为接收者的方法被调用时,接收者既能为值又能为指针:

var v Vertex
v.Scale(5) // OK
p := &v
p.Scale(10) // OK
对于语句 v.Scale(5),即便 v 是个值而非指针,带指针接收者的方法也能被直接调用。 也就是说,由于 Scale 方法有一个指针接收者,为方便起见,Go 会将语句 v.Scale(5) 解释为 (&v).Scale(5)。

另外,Go会将指针的.运算自动解释为(*).

上一篇 下一篇

猜你喜欢

热点阅读