|
|
1
2
由于使用了指针和切片(也是引用),原始规则字段发生了更改。 在调用OstarCF之前,将调用ChainsTo方法。它按值使用语法对象,因此进行了复制,但Rules字段是Rules上的一部分指针。因此,当复制此字段时,它仍然指向原始对象的数据。 然后,在方法ChainsTo中,规则字段上有一个循环。它复制了作为字符串片段的Right字段(因此它仍然指向原始对象的数据):
最后,通过切片rhs来声明ns变量:
在这个阶段,ns变量仍然指向包含原始对象字符串片段的缓冲区。最初,i=0,因此ns是一个空片,重用缓冲区。附加项目时,它们将替换原始数据。 这就是为什么您的数据被更改的原因。 您可以通过显式复制来解决此问题,例如,通过以下方式替换上述行:
Go切片已经取代了C指针算法,但在某些情况下,它们几乎同样危险/误导。 |
|
|
wavesinaroom · 断言结构向量长度 11 月前 |
|
fghoussen · 在C结构体中,为什么打包、对齐似乎会进行填充? 1 年前 |
|
|
kamkow1 · 匿名结构的初始值设定项错误无效 1 年前 |