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

quanquan616 · · 796 次点击
**兄弟,我真是闲的跟你一样蛋疼……这东西真不好测试,为了获取到interface中的真实data地址,我也是头痛……** **经过各种google,终于在万能的stackoverflow上看到一个好办法……** 附上stackoverflow地址:https://stackoverflow.com/questions/57696977/how-to-get-a-pointer-to-the-underlying-value-of-an-interface-in-go 。 附上wide的测试代码地址:https://wide.b3log.org/playground/49b4de79f363ef7c1415d2372f972344.go
#4
更多评论
你这里打印的是 slice 中元素的地址,都是连续的,看着没什么问题。至于`interface{}`,我就不清楚怎么查了,怀疑取值时go内部会转换掉,你很难拿到。要不一起看看 https://research.swtch.com/interfaces 研究下。
#1
我觉得吧, make只是分配一个interface{}的数组, 但是数组的值都是nil, 这个应该理解成void*, 这个地址有3个很正常, 指针本身也有地址的.你后来的赋值, 把小整数赋值过去, 不分配内存的意思我相信应该是这个小整数已经作为常量池的数据 固定在内存某个地方, 你的interface是直接指向这里的, 而不用另外新分配的动态变量地址.
#2