一个golang 指针问题请教?

查看:172
本文介绍了一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆