Go 1.15 中,小整数转换为接口值的疑问

quanquan616 · · 796 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

在站长的公众号里,看到了一篇关于 "Go 1.15 中,小整数转换为接口值时,将不再进行内存分配" 的文章。<br/> 原文地址:`https://mp.weixin.qq.com/s/1r0nt8nA3foDRRrbRp4omg`<br/><br/> 我自己闲得蛋疼,折腾了一下。代码运行后,为什么每一个打印出来的内存地址都会不一样?<br/> OS: ubuntu server 18.04 LTS 64bit<br/> go version: 1.15.2<br/> 我自己折腾的代码如下:<br/> ```go package main import "fmt" func main() { var slice = make([]interface{}, 3) slice[0] = 1 slice[1] = 128 slice[2] = 256 for i := 0; i < 3; i++ { fmt.Printf("%p, ", &slice[i]) } println() } /* 运行结果: 0xc00005c150, 0xc00005c160, 0xc00005c170, */ ``` <br/> 运行结果的截图:<br/> ![1.png](https://static.studygolang.com/200929/4ddf3bcb931fdaaf2ff674d234e78d2b.png) <br/><br/> 按照 Go 1.15 开始的特性:小整数转换为 `interface{}` 将不再需要进行内存分配。<br/> 那为什么打印出来的 3 个地址都是不一样的?如果说 256 这个值打印出来的地址有变化,那是好理解的。但是 1 和 128,不都是在小整数范围内的,为什么它俩的内存地址不一样?<br/> 恳请大佬解惑,还是我哪里打开姿势不对?<br/>

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

796 次点击  ∙  1 赞  
加入收藏 微博
5 回复  |  直到 2020-10-01 11:26:51
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传