提问人:Lupascu Gabriel Cristian 提问时间:12/17/2022 最后编辑:Lupascu Gabriel Cristian 更新时间:12/17/2022 访问量:55
切片到指针映射重复值
Slice to Map of pointers duplicates values
问:
这是一个初学者的问题,关于为什么我在尝试从 go lang 中的切片获取地图时会得到这样的结果。我有这个代码:
func (p *ProductsStruct) ToMap() map[int32]*Product {
result := map[int32]*Product{}
for _, prod := range p.Products {
result[prod.ProductId] = &prod
}
return result
}
ProductsStruct 只有 Product 的一部分,Product 结构如下
type ProductsMedusa struct {
Products []ProductMedusa
}
type Product struct {
ProductId int32
ProductTitle string
PriceUSD float32
}
我不明白为什么调用函数 ToMap() 会产生一个结果,其中包含所有键,但指向同一对象的指针:最后一个。另外,我知道如果我不使用地图值作为指针,它可以正常工作。
谢谢
答: 暂无答案
评论
prod := prod
result[prod.ProductId] = &prod
for ... range
prod
&prod
for i, prod := range p.Products { result[prod.ProductId] = &p.Products[i] }