接收者
接收者是将操作副本,可以理解成,在每一个方法中,它对属性的操作都是先创建一个该属性的副本,接着操作副本。
//单文件需要将包名改为main
package main
import (
"fmt"
)
type class struct {
data int
}
func (c class) Print() {
fmt.Println(c.data)
}
func (c class) Change() {
c.data = 2
}
func main() {
/*
output:
1
*/
temp := class{1}
temp.Change()
temp.Print()
}
可以看出,temp的data并没有收到Change的改变。因为Change只是拷贝了一份副本,并没有对原数据进行操作。
指针接收者
//单文件需要将包名改为main
package main
import (
"fmt"
)
type class struct {
data int
}
func (c *class) Print() {
fmt.Println(c.data)
}
func (c *class) Change() {
c.data = 2
}
func main() {
/*
output:
2
*/
temp := &class{1}
//temp = new(class) 另一种写法
temp.Change()
temp.Print()
}
可以看出来,指针接收者操作的是原数据。相比而言,指针接收者更像其他语言中的类的概念,其他可以类比成属性以及方法。
网友评论