接收者
接收者是將操作副本盏求,可以理解成,在每一個(gè)方法中框产,它對(duì)屬性的操作都是先創(chuàng)建一個(gè)該屬性的副本贰逾,接著操作副本悬荣。
//單文件需要將包名改為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的改變疙剑。因?yàn)镃hange只是拷貝了一份副本氯迂,并沒有對(duì)原數(shù)據(jù)進(jìn)行操作。
指針接收者
//單文件需要將包名改為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()
}
可以看出來言缤,指針接收者操作的是原數(shù)據(jù)嚼蚀。相比而言,指針接收者更像其他語言中的類的概念管挟,其他可以類比成屬性以及方法轿曙。