程序开发 · 2023年7月27日

Go 面试难题:为什么 for range 循环中 map 的所有 v.name 都变成了“博客”?

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍
《Go 面试难题:为什么 for range 循环中 map 的所有 v.name 都变成了“博客”?》,这篇文章主要会讲到
等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!,
,
Go面试难题:为何键值对中v.name都是“博客”,题目中展示了一个简单的Go程序,其中有一个map[string]*student类型的数据结构m。当程序执行for range循环时,注意到键值对中v.name的值都变成了“博客”。那么,为什么会出现这种情况呢?,
答案:变量地址固定,问题关键在于for range循环的变量地址是固定的。在for range循环中,k和v分别是map键和值的地址。当循环执行时,它会将map中每个键值对的地址依次赋值给k和v。,然而,在问题代码中,使用的是指针类型(*student)。这意味着,&stu变量指向student结构体的地址,而不是结构体本身。因此,所有指向student结构体的指针都有相同的地址。,
指针赋值,在for range循环的每一次迭代中,m[stu.name] = &stu本质上是将相同地址(student结构体的地址)分别赋值给map的每个key。如此一来,当最后迭代结束后,map中的所有value都指向student结构体的同一地址。,
结果:统一的值,由于所有value都指向同一地址,这意味着当对这些值进行更改时,它们的底层对象(student结构体)也会被更改。因此,程序最后打印的结果中, सभी v.name 的值都变成了循环中最后赋值的值“博客”。,通过了解指针和变量地址的原理,可以理解为什么在给定代码中会发生这种现象。这有助于在编写Go程序时避免潜在的陷阱和错误。,今天带大家了解了的相关知识,希望对你有所帮助;关于GOLANG的技术知识我们会一点点深入介绍,欢迎大家关注GOLANG公众号,一起学习编程~,Go面试难题:为何键值对中v.name都是“博客”,偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍
《Go 面试难题:为什么 for range 循环中 map 的所有 v.name 都变成了“博客”?》,这篇文章主要会讲到
等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!,

当前位置: > > > > Go 面试难题:为什么 for range 循环中 map 的所有 v.name 都变成了“博客”?

Go 面试难题:为什么 for range 循环中 map 的所有 v.name 都变成了“博客”?

2024-11-13 16:34:15
0浏览
收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《Go 面试难题:为什么 for range 循环中 map 的所有 v.name 都变成了“博客”?》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

Go面试难题:为何键值对中v.name都是“博客”

题目中展示了一个简单的Go程序,其中有一个map[string]*student类型的数据结构m。当程序执行for range循环时,注意到键值对中v.name的值都变成了“博客”。那么,为什么会出现这种情况呢?

答案:变量地址固定

问题关键在于for range循环的变量地址是固定的。在for range循环中,k和v分别是map键和值的地址。当循环执行时,它会将map中每个键值对的地址依次赋值给k和v。

然而,在问题代码中,使用的是指针类型(*student)。这意味着,&stu变量指向student结构体的地址,而不是结构体本身。因此,所有指向student结构体的指针都有相同的地址。

指针赋值

在for range循环的每一次迭代中,m[stu.name] = &stu本质上是将相同地址(student结构体的地址)分别赋值给map的每个key。如此一来,当最后迭代结束后,map中的所有value都指向student结构体的同一地址。

结果:统一的值

由于所有value都指向同一地址,这意味着当对这些值进行更改时,它们的底层对象(student结构体)也会被更改。因此,程序最后打印的结果中, सभी v.name 的值都变成了循环中最后赋值的值“博客”。

通过了解指针和变量地址的原理,可以理解为什么在给定代码中会发生这种现象。这有助于在编写Go程序时避免潜在的陷阱和错误。

今天带大家了解了的相关知识,希望对你有所帮助;关于GOLANG的技术知识我们会一点点深入介绍,欢迎大家关注GOLANG公众号,一起学习编程~

如何实现高效的电脑网络共享
iframe 中引入短链接为何无法正常显示?如何解决?