func Test_aaas(t *testing.T){
tesr1 := make(chan *xxa,10)
xx :=make(map[int]xxa,0)
b :=xxa{caomao:"XXb"}
c :=xxa{caomao:"XXc"}
d :=xxa{caomao:"XXd"}
e :=xxa{caomao:"XXe"}
xx[1] =b
xx[2] =c
xx[3] =d
xx[4] =e
for _,v := range xx{
fmt.Println("v的值:",v)
tesr1 <- &v
fmt.Println(tesr1)
}
for m := range tesr1{
fmt.Println(m)
}
}
以上代码 我原本以为会是这样的输出。。。
=== RUN Test_aaas
v的值: {XXb}
v的值: {XXc}
v的值: {XXd}
v的值: {XXe}
&{XXb}
&{XXc}
&{XXd}
&{XXe}
但实际输出是这样的
=== RUN Test_aaas
v的值: {XXb}
v的值: {XXc}
v的值: {XXd}
v的值: {XXe}
&{XXe}
&{XXe}
&{XXe}
&{XXe}
很容易看出来 通过range 遍历出来的值 其实是值引用, 如果要取到这个真实值的引用还需要 原本 range的对象
func Test_aaas(t *testing.T){
tesr1 := make(chan *xxa,10)
xx :=make(map[int]xxa,0)
b :=xxa{caomao:"XXb"}
c :=xxa{caomao:"XXc"}
d :=xxa{caomao:"XXd"}
e :=xxa{caomao:"XXe"}
xx[1] =b
xx[2] =c
xx[3] =d
xx[4] =e
for i,v := range xx{
fmt.Println("v的值:",v)
tmp := xx[i] //看这里 不能直接去 v的引用 v是一个固定指针
tesr1 <- &tmp
}
for m := range tesr1{
fmt.Println(m)
}
}