图解Go引用的底层实现

Posted 菜刚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图解Go引用的底层实现相关的知识,希望对你有一定的参考价值。

Go怎么可能有引用?得了吧~
有人要说了,那利用make()函数执行后得到的slice、map、channel等类型,不都是得到的引用吗?

我要说:那能叫引用吗?你能确定啥叫引用吗?
如果你有点迷糊,那么请听我往下讲:

这一切要从变量说起。

什么是变量

无论是引用变量还是指针变量,都是变量;那么,什么叫变量?
其实变量本质就是一块内存。通常,我们对计算机内存进行操作,最直接的方式就是:“计算机,在0x0201地址内存一个整数100,在0x00202地址存一个浮点数10.6,读取0x00203的数据…” 这种方式让机器来操作还行,如果直接写成代码让人看的话,这一堆“0x0201、0x0202…”难记的地址能把人给整崩溃了~
于是,聪明的人们想出了一种方法:把一堆难记的地址用其他人类可以方便读懂的方式来间接表示。例如:将“0x0201”的地址命名为“id”,将“0x0202”命名为“score”…然后,代码编译期间,再将"name"等人类能读懂的文字转化为真实的内存地址;于是,变量诞生了~

以上是关于图解Go引用的底层实现的主要内容,如果未能解决你的问题,请参考以下文章

图解Go引用的底层实现

图解Go引用的底层实现

图解go反射实现原理

图解 Google V8 # 05:函数表达式的底层工作机制

图解Go的channel底层原理

从零开始学Go之容器:切片