package main
import ( "fmt" ) type student struct { Name string Age int } func main() { m := pase_map() for k, v := range m { fmt.Printf("key = %s,value =%v\n", k, v) } } func pase_map() map[string]*student { m := make(map[string]*student) stu := []student{{"joy", 12}, {"lei", 14}} for _, v := range stu { /*坑1*/ m[v.Name] = &v /*正解1,将索引加上*/ //m[v.Name]=&stu[index] /*正解2,赋值给新变量,再取地址*/ //v1 := v //m[v.Name] = &v1 } return m }
v 是一个拷贝,所有的 v 都指向一个地址,循环结束时才将最后一个的地址修改导致所有的都是一样,不知这样的理解对不对,求正解
在“range”语句中生成的数据的值是真实集合元素的拷贝。它们不是原有元素的引用。
这意味着更新这些值将不会修改原来的数据。同时也意味着使用这些值的地址将不会得到原有数据的指针。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于