type t struct {
n int
}
func main() {
m := map[string]t{
"1": t{1},
"2": t{2},
"3": t{3},
"4": t{4},
}
a := []*t{}
for _, v := range m {
a = append(a, &v)
}
fmt.Println(a)
}
以上代码,对一个 object 数组或 map 进行遍历,对每个元素取地址,循环结束后,a中的4个元素都是 t{4}!!因为 for 循环中的 v,在循环结束后被赋值为最后一个元素!
map 元素类型换成基本的 int,或者 interface{} , 结果都是一样。
正确的用法:
for k, _ := range m {
a = append(a, &m[k])
}