白首方悔读书迟 2022-03-10 20:17 采纳率: 100%
浏览 92
已结题

go 多重循环中对结构体切片append 最后结果和预期不一致

问题遇到的现象和发生背景

go 多重循环中对结构体切片append 最后结果和预期不一致

问题相关代码,请勿粘贴截图
package main

import (
    "fmt"
    _ "github.com/mattn/go-oci8"
    "strconv"
    _ "test-app/internal/packed"
)

type A struct {
    aa int
    ab string
    cc []B
}
type B struct {
    ba int
    bb string
}
func main() {
    var q1 []A

    q2:=make([]A,0)
    q1=[]A{{aa:1,ab:"1",cc:[]B{{ba: 1},{ba: 2},{ba: 3}}},{aa:2,ab:"2",cc:[]B{{ba: 1},{ba: 2},{ba: 3}}}}
    number:=0
    for _, q1v := range q1 {
        x:=[]string{"11","22"}
        for _, iv2 := range x {
            ls:=q1v
            for i, _ := range ls.cc {
                number+=1
                sj:=iv2 +"----"+strconv.Itoa(number)
                ls.cc[i].bb=sj
            }
            fmt.Printf("加入临时值:%+v\n",ls)
            q2=append(q2,ls)
        }

    }
    for _, a := range q2 {
        fmt.Printf("输出:%+v\n",a)
    }
    //fmt.Printf("s%+v",q2)
}

运行结果及报错内容

img

可以看出最后输出的和加入临时值的时候并不一样

我的解答思路和尝试过的方法

没找到解决方案

我想要达到的结果

最后输出的结果和 加入临时值一致

  • 写回答

4条回答 默认 最新

      报告相同问题?

      问题事件

      • 系统已结题 3月19日
      • 已采纳回答 3月11日
      • 赞助了问题酬金50元 3月10日
      • 创建了问题 3月10日

      悬赏问题

      • ¥15 银河麒麟v10 执行.run失败如何解决
      • ¥15 用mysql做一个高校工资管理系统
      • ¥21 Multisim设计用三端集成稳压器设计稳压电路
      • ¥15 tp6,在iframe里的网址通过获取url参数失败
      • ¥15 打开opendaylight查看拓扑,为什么直接就显示了两个Switch,在mininet配置了一个topo,这两个Switch还在
      • ¥15 无法远程连接pgsql
      • ¥15 建立DLNM模型时显示基础基矩阵不一致
      • ¥15 贝叶斯重复测量方差分析
      • ¥15 c#五子棋为什么悔棋后全部的棋子都没了 但是数组中的棋子还在只是悔棋后剩余的棋子在窗口没显示
      • ¥15 c#如何将到毫秒的时间字符串转换成byte[8]