https://juejin.cn/post/6923477800041054221
看這篇文章
Golang 基礎面試高頻題+詳細解析【第一版】來啦~
大叔說碼
for-range的坑
func main() {
slice := []int{0, 1, 2, 3}
m := make(map[int]*int)
for key, val := range slice {m[key] = &val
}for k, v := range m {fmt.Printf("key: %d, value: %d \n", k, *v)
}
}
輸出:
key: 0, value: 3
key: 1, value: 3
key: 2, value: 3
key: 3, value: 3
解析:整個循環中,val都是同一個全局變量(與for range 結構有關),地址是一樣的,每次遍歷該地址上的值都會被新的值覆蓋掉,所以在遍歷結束后,該地址存的值是切片上的最后一個元素3。具體for range 坑點可以參考這篇文章https://mp.weixin.qq.com/s?__biz=MzIyMTg2OTQ5NA==&mid=2247483763&idx=1&sn=3123d65f1b63c9676ff34f066f9c0d9a&chksm=e83765aadf40ecbc67a274a788b7254c8d6a5260b18f0925c398ccbf1f14bee5028eb376bec0&token=903653199&lang=zh_CN#rd
(Golang 之 我被 for-range 循環進去了)