平时写得多的是python,最近看了一点go,今天碰到了一个问题,和大家分享一下
package main
import "fmt"
type student struct {
Name string
Age int
}
func pase_student() {
m := make(map[string]*student)
stus := []student{
{Name: "zhou", Age: 24},
{Name: "li", Age: 23},
{Name: "wang", Age: 22},
}
for _, stu := range stus {
m[stu.Name] = &stu
}
fmt.Println(m["zhou"].Name)
}
func main() {
pase_student()
}
代码很简单,大家可以思考一下会打印出什么。
time.sleep(60) # 思考
结果是 wang !,惊喜不惊喜!遍历赋值啊同学们,这么简单的操作都能出幺蛾子,WTF!
为什么是 wang 呢?
你tm给我
解释解释
什么是惊喜
:
for循环的时候,变量stu的指针是不变的,每次循环仅仅是对student结构体的 值 拷贝,上面的for循环和下面是一样的:
var stu student
for _, stu = range stus {
m[stu.Name] = &stu
}
所以 &stu 自始至终都是一个地址,变化的是这个地址上存储的值。 &stu 最终存储的值是 student{Name: "wang", Age: 22} 结构体,所以拿出来的是 wang 。
可以将 m 打出来看一下:
map[zhou:0xc42000a260 li:0xc42000a260 wang:0xc42000a260]
验证了我们上面的想法,大家的value都是同一个地址。
看到这里,如果是一个日常写c,c++等强类型语言的同学可能会说,神经病啊!这有什么好说的!不就是这样的吗!请原谅我,我日常写python的 [捂脸]。
从上面的例子可以看出来,在go中,变量名是 存储地址的名字 。它在编译时绑定已经完成,运行时是不可以改变的,你只能改变地址中存储的值。
而在python中,变量是对象的名字,运行时变量可以绑定到任意的对象上。如下所示:
In [4]: a = 123456 In [5]: id(a) Out[5]: 4426596208 In [6]: a = 1234567 In [7]: id(a) Out[7]: 4426592592
注意:由于python对int类型实现了 小整数对象池 ,不要用 0-255 的整数做实验,不然你得到id会是一样的。
也就是说,当你循环一个list的时候,每次得到的是不同对象,变量指向了不同的地址:
In [9]: for i in [2222, 2223, 2224]: ...: print(id(i)) ...: 4426596208 4426592336 4426596080
上面这段代码,python为我们创建了3个 PyIntObject , i 只是他们的名字。而在go中,可以认为只有一个object,值变化了3次。
python中说的 赋值就是建立一个对象的引用 ,是实话。
# python
# 变量赋值
# 多个变量赋值
# 全局变量赋值
# Python动态声明变量赋值代码实例
# python变量赋值方法(可变与不可变)
# Python中实现变量赋值传递时的引用和拷贝方法
# Python变量赋值的秘密分享
# Python编程之变量赋值操作实例分析
# 深入理解Python中变量赋值的问题
# python实现同时给多个变量赋值的方法
# python模块中判断全局变量的赋值的实例讲解
# 的是
# 都是
# 而在
# 绑定
# 是一个
# 他们的
# 给我
# 看了
# 是这样
# 都能
# 是一样的
# 不可以
# 遍历
# 当你
# 这段
# 得多
# 同学们
# 很简单
# 不就
# 仅仅是
相关文章:
c++怎么用jemalloc c++替换默认内存分配器【性能】
佛山企业网站制作公司有哪些,沟通100网上服务官网?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
网站制作壁纸教程视频,电脑壁纸网站?
建站之星伪静态规则如何设置?
广州美橙建站如何快速搭建多端合一网站?
建站之星后台密码如何安全设置与找回?
网站制作难吗安全吗,做一个网站需要多久时间?
如何用PHP快速搭建高效网站?分步指南
建站主机默认首页配置指南:核心功能与访问路径优化
北京网站制作公司哪家好一点,北京租房网站有哪些?
jQuery 常见小例汇总
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
定制建站如何定义?其核心优势是什么?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
如何在IIS中新建站点并配置端口与物理路径?
存储型VPS适合搭建中小型网站吗?
建站之星价格显示格式升级,你的预算足够吗?
相册网站制作软件,图片上的网址怎么复制?
如何配置IIS站点权限与局域网访问?
网站制作企业,网站的banner和导航栏是指什么?
如何选择适配移动端的WAP自助建站平台?
焦点电影公司作品,电影焦点结局是什么?
如何选择美橙互联多站合一建站方案?
建站之星如何通过成品分离优化网站效率?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
北京专业网站制作设计师招聘,北京白云观官方网站?
网站按钮制作软件,如何实现网页中按钮的自动点击?
如何用西部建站助手快速创建专业网站?
油猴 教程,油猴搜脚本为什么会网页无法显示?
建站与域名管理如何高效结合?
如何零成本快速生成个人自助网站?
如何通过可视化优化提升建站效果?
个人摄影网站制作流程,摄影爱好者都去什么网站?
建站之星如何快速解决建站难题?
如何获取PHP WAP自助建站系统源码?
网站代码制作软件有哪些,如何生成自己网站的代码?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
php json中文编码为null的解决办法
重庆市网站制作公司,重庆招聘网站哪个好?
贸易公司网站制作流程,出口贸易网站设计怎么做?
建站主机SSH密钥生成步骤及常见问题解答?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
如何在阿里云高效完成企业建站全流程?
nginx修改上传文件大小限制的方法
制作公司内部网站有哪些,内网如何建网站?
如何快速搭建支持数据库操作的智能建站平台?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
*请认真填写需求信息,我们会在24小时内与您取得联系。