首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在struct的切片内将struct赋值给struct

在struct的切片内将struct赋值给struct
EN

Stack Overflow用户
提问于 2021-10-15 08:17:20
回答 1查看 56关注 0票数 1

将struct赋给循环内的struct时,会出现奇怪的行为。

代码语言:javascript
复制
package main

import (
    "fmt"
)

func main() {
    type A struct {
        a string
    }
    type B struct {
        A
        b string
    }
    var z []B
    
    c := A{a:"Test"}
    d := B{A:c,b:"Test"}
    
    fmt.Println(c)
    fmt.Println(d)
    
    z = append(z, B{b:"Test"})
    z = append(z, B{b:"Test"})
    
    fmt.Println(z)
    
    for _, x := range z {
        x.A = c
    }
    
    fmt.Println(z)
}

输出:

代码语言:javascript
复制
{Test}
{{Test} Test}
[{{} Test} {{} Test}]
[{{} Test} {{} Test}]

期望值:

代码语言:javascript
复制
{Test}
{{Test} Test}
[{{} Test} {{} Test}]
[{{Test} Test} {{Test} Test}]

检查此Go Playground

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-15 10:14:34

原因是,通过在z上迭代,您正在制作z元素的副本,标识为x。换句话说,更新x并不意味着您要更新z,而是更新它的元素的副本。您应该按照以下步骤进行操作:

代码语言:javascript
复制
for i, _ := range z {
    z[i].A = c
}

我已经把它复制到playground上了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69581769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档