一个golang 指针问题请教?
本文介绍了一个golang 指针问题请教?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
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语句内只使用一个内存地址空间,每次循环,都把新值赋到同一个地址上,所以打印值是有区别的,但取地址却是同一个。
可以这样修改:
....
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)
}
....
这篇关于一个golang 指针问题请教?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文