![]() |
1
2
由于使用了指针和切片(也是引用),原始规则字段发生了更改。 在调用OstarCF之前,将调用ChainsTo方法。它按值使用语法对象,因此进行了复制,但Rules字段是Rules上的一部分指针。因此,当复制此字段时,它仍然指向原始对象的数据。 然后,在方法ChainsTo中,规则字段上有一个循环。它复制了作为字符串片段的Right字段(因此它仍然指向原始对象的数据):
最后,通过切片rhs来声明ns变量:
在这个阶段,ns变量仍然指向包含原始对象字符串片段的缓冲区。最初,i=0,因此ns是一个空片,重用缓冲区。附加项目时,它们将替换原始数据。 这就是为什么您的数据被更改的原因。 您可以通过显式复制来解决此问题,例如,通过以下方式替换上述行:
Go切片已经取代了C指针算法,但在某些情况下,它们几乎同样危险/误导。 |
![]() |
deen · 从递归方法调用另一个类的方法:Java 7 年前 |
![]() |
nd97 · 读取Bash中可能删除的文件 7 年前 |
![]() |
je123 · $.post()可能的竞争条件;重定向问题 7 年前 |
![]() |
zackster7171 · C程序在GDB中工作,但不正常 7 年前 |
![]() |
Di Wang · 单处理器环境可以防止竞争条件吗? 7 年前 |
![]() |
yun · USB音频缓冲区欠载 7 年前 |