巧妙的 for 循环
for 循环越界
情况
for 循环在处理数组和 slice 有区别,所以 for 语句本身的 copy 会导致一些莫名其妙的问题
如何避免
不要用拷贝出来的值
建议
如果 slice 里面的值不是指针,用
for idx := range xxx {
item = xxx[idx]
}如果里面的值是指针,用
for _,item := range xxx {
}实际效果
func BuildChildMenu(menus []Menu) {
menuMap := make(map[int64]*Menu, len(menus))
for i := range menus {
menu := menus[i]
menuMap[menu.ID] = &menu
}
}menuMap 里面是正常的值
如果是:
所有的 *Menu 值都是一样的
最后更新于
这有帮助吗?