代碼如下
package main
import (
"fmt"
)
type Data struct {
n int
}
func main() {
data := []Data{
{1}, {2}, {3},
}
// code 1
res1 := []*Data{}
for _, one := range data {
res1 = append(res1, &one)
}
fmt.Println("res1", res1)
// code 2
res2 := []*Data{}
var one Data
for i := 0; i < len(data); i++ {
one = data[i]
res2 = append(res2, &one)
}
fmt.Println("res2:", res2)
// code 3
res3 := []*Data{}
for i := 0; i < len(data); i++ {
res3 = append(res3, &data[i])
}
fmt.Println("res3:", res3)
}
本以為 range 是類似 code 3
中的行為, 實(shí)際上是 code 2
的行為.
也即 res1 中的三個(gè)元素都是同一個(gè)指針.
記下來.