相信看过Go源码的同学已经对unsafe.Pointer
非常的眼熟,因为这个类型可以说在源码中是随处可见:map
、channel
、interface
、slice
…但凡你能想到的内容,基本都会有unsafe.Pointer
的影子。
看字面意思,unsafe.Pointer
是“不安全的指针”,指针就指针吧,还安不安全的是个什么鬼?
接下来,我们就来了解一下Go的这个“不安全的指针”unsafe.Pointer
。
什么叫变量
在了解指针之前,我们有必要先了解一下什么叫“变量”。
其实变量就是一个内存地址的名字,这听起来可能有些奇怪:指针不是地址码?
听我细细来讲:此地址非彼地址。通常,我们要在计算机内存中存数据,我们会怎么做?
我们肯定说:“计算机,在0x0201地址内存一个数100”。就这一句话,别看它糙,实际上在计算机中真就这么干的。然后我们接着说:“在0x0202中存什么,在0x0203中存什么,把0x0203中的值变为0x0201中的值…”
这些“0x0201”、“0x0202”、“0x0203”…