最近写了一个批量查询,结果转成Map[id]bean的方法,上线后有问题,发现每次所有的
k
都指向同一个value
,最后背上一个基础不牢
的骂名
我来还原一下案发现场
其实问题很简单
b
这个指针其实只创建了一次
,之后每一次遍历其实都只是将这个指针指向新的地址解决方式:
设置中间值,用来保存每次遍历出来的值
// 组装成map返回 k:userId v:v
m := make(map[uint]*entity.Bottom)
for _, b := range bottoms {
// 中间变量指向对应的地址空间,并且每次都会重新创建一次,不会产生干扰
tmp := b
m[b.Id] = &tmp
}
直接取值
// 不存放指针了,直接存值
m := make(map[uint]entity.Bottom)
for _, b := range bottoms {
m[b.Id] = b
}
for k, v := range m {
fmt.Println("k:", k, "v:", v)
}