登录
首页 >  Golang >  Go问答

一个golang 指针问题请教?

来源:SegmentFault

时间:2023-02-18 18:10:04 357浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《一个golang 指针问题请教?》,主要介绍了go,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

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 指针问题请教?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于golang的知识点!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>