当前位置: 首页 > 网络应用技术

一篇文章完全理解了GO结构方法和值的方法和价值之间的区别

时间:2023-03-08 01:43:23 网络应用技术

  众所周知,当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