Amp*_*aro -5 struct append go slice
我有两个这样的嵌套结构:
type Block struct {
ID string
Contents []string
}
type Package struct {
Name string
Blocks []Block
}
Run Code Online (Sandbox Code Playgroud)
p当我尝试在特定块中附加新内容时,原始包 ( ) 不会更改。
for _, b := range p.Blocks {
if b.ID == "B1" {
fmt.Println("Adding a new content")
b.Contents = append(b.Contents, "c3")
}
}
Run Code Online (Sandbox Code Playgroud)
例子:
发生这种情况是因为这一行:
for _, b := range p.Blocks {
Run Code Online (Sandbox Code Playgroud)
创建切片中每个的副本Block。因此,当您随后在循环体中进行更改时,您会将它们更改为 的副本Block,而不是Block切片中的 。
如果您改为使用索引来获取指向 each 的指针Block,例如
for i := range p.Blocks {
b := &p.Blocks[i]
Run Code Online (Sandbox Code Playgroud)
它按预期工作:
https://play.golang.org/p/h_nXEX9oWRT