Fork me on GitHub

Go方法集和方法表达式

直接看代码

方法集:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
type User struct {
id int
name string
}

func (self User) Test() {
fmt.Println(self)
}

func main() {
u := User{1,"test"}
mValue := u.Test //⽴即复制 receiver,因为不是指针类型,不受后续修改影响

u.id, u.name = 2, "modified"
u.Test()
mValue()
}

输出:

1
2
{2 modified}
{1 test}

修改上述代码,将Test()方法的receiver类型改为指针

1
2
3
func (self *User) Test() {
fmt.Println(self)
}

重新运行上述代码,输出:

1
2
{2 modified}
{2 modified}
您的鼓励是我持之以恒的动力