for range 鮮爲人知的坑,其實之前用 php 的時候遇到過,Java 沒有這個問題php
// 由於 range 的時候,會建立一個臨時變量 v 來接受 data 的遍歷值 // 而不是你想的 append(&data[0], $data[1], ...) data := []int{1,2,3} result := []*int{} for _, v := range data { result = append(result, &v) fmt.Println(&v) // 0xc0000ac008,0xc0000ac008,0xc0000ac008 } for _, v := range result { fmt.Println(*v) // [3,3,3] } // 正確處理方式 data := []int{1,2,3} result := []*int{} for i, v := range data { result = append(result, &data[i]) } for _, v := range result { fmt.Println(*v) }