众所周知,当GO struct定义方法是修改方法中的属性值时,使用指针或值之间的差异,方法定义方法的修改仅限于该方法,并且指针也不有限。
如果文章在这里,那么这是非常平庸的,所以我计划带所有人进行无聊但思考的实验。
在开始之前,编写一个简单的代码来运行前面提到的内容,并让每个人熟悉下一个实验代码的编码规则。在本文中,GO已更新了许多版本,这些版本可能不适用。, 代码:
操作结果:
如果我们期望在方法定义中修改属性不会给外部带来影响。
接下来,开始我们的实验
在我们的日常发展中,我们经常在该方法中遇到另一种方法。如果在调用方法中修改属性会发生什么?
将有四个洋娃娃案例:,,(,,(实际情况可能仍然有更多的洋娃娃,但是在这里我们只需要理解一层,其余的可以根据数学归纳方法来理解。),转到中国和加拿大的代码曲法的代码:
然后加入:
结果:
列出表格:|方法|main()调用末端的最终值|第一个方法名称/方法名称末尾的方法的末尾的第二种方法/方法末端值||--- |--- | - |--- ||setpv()|3 |setPV(3) / 1 |setV(3+1) / 4 |setvp()|3 |setVP(4) / 5 |setp(4+1)/ 5 ||setvv()|3 |setVV(5) / 3 |setV(5+1) / 6 |setpp()|6 |setpp(6) / 7 |setp(6+1) / 7 |
结论:只有整个调用链接是由指针定义的方法,并且将保留属性的修改,否则仅在方法中有效,这与初始规则一致。
您可能会认为文章即将结束,但并非如此,让我们重点关注:
修改与:
执行它之后,它修改的值不仅在内部!内部方法会复制副本吗?
打印出指针以确认!
看一下操作的结果(我标记了需要关注的三行):
可以找到:
至于洋娃娃打电话过多会导致记忆飙升,这里不会进行讨论。如果您有兴趣,可以自己检查信息或查看GO本身的基本实现。
在本文终于结束之前,总结了这个无聊的实验,它可以提醒我们的实际发展:
作者:Yian