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