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) }