环境
go version go1.10.1 darwin/amd64
选择值或指针作为接收者
使用指针接收者的原因有二:
首先,方法能够修改其接收者指向的值。
其次,这样可以避免在每次调用方法时复制该值。若值的类型为大型结构体时,这样做会更加高效。
下面看下面的代码演示
package main
import (
"fmt"
)
// Rectangle 长方形
type Rectangle struct {
width, height float64
}
// Area Rectangle的面积
func (v *Rectangle) Area() float64 {
return v.width * v.height
}
// Scale 用给定的值调整比例
func (v *Rectangle) Scale(f float64) {
v.width = v.width * f
v.height = v.height * f
}
func main() {
v := &Rectangle{3, 4}
fmt.Printf("调整比例之前 : %+v, Area: %v\n", v, v.Area())
v.Scale(5)
fmt.Printf("调整比例之后 : %+v, Area: %v\n", v, v.Area())
}
运行后得到的结果如下
调整比例之前 : &{width:3 height:4}, Area: 12
调整比例之后 : &{width:15 height:20}, Area: 300
在实例中, Scale 和 Area 接收者的类型为 *Rectangle ,即便 Area 并不需要修改其接收者。
通常来说,所有给定类型的方法都应该有值或指针接收者,但并不应该二者混用。
版权声明
由 durban创作并维护的 小绒毛的足迹博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文首发于 博客( https://www.xiaorongmao.com ),版权所有,侵权必究。