package main
import(
"fmt"
)
type PluginInfo struct{
Id int
Name string
}
func main(){
info := make([]*PluginInfo,0)
pluginMap := make(map[int]PluginInfo)
pluginMap[1] = PluginInfo{
Id:1,
Name:"aa",
}
pluginMap[2] = PluginInfo{
Id:2,
Name:"bb",
}
for i, tmp := range pluginMap {
fmt.Println(i, &tmp)//打印出得数据没有问题
info = append(info, &tmp) //info中的地址数据竟然是相同的
}
fmt.Println(info)
for _, tmp := range info {
fmt.Println(*tmp)
}
}
为什么打印最后的info,会是两个相同结果呢都是{2 bb} ?
作用域的问题,这里的i和tmp的作用域只在for语句块之内,tmp在for语句内只使用一个内存地址空间,每次循环,都把新值赋到同一个地址上,所以打印值是有区别的,但取地址却是同一个。
可以这样修改: