图解Go的unsafe.Pointer

相信看过Go源码的同学已经对unsafe.Pointer非常的眼熟,因为这个类型可以说在源码中是随处可见:mapchannelinterfaceslice…但凡你能想到的内容,基本都会有unsafe.Pointer的影子。

看字面意思,unsafe.Pointer是“不安全的指针”,指针就指针吧,还安不安全的是个什么鬼?

接下来,我们就来了解一下Go的这个“不安全的指针”unsafe.Pointer

什么叫变量

在了解指针之前,我们有必要先了解一下什么叫“变量”。
其实变量就是一个内存地址的名字,这听起来可能有些奇怪:指针不是地址码?
听我细细来讲:此地址非彼地址。通常,我们要在计算机内存中存数据,我们会怎么做?
我们肯定说:“计算机,在0x0201地址内存一个数100”。就这一句话,别看它糙,实际上在计算机中真就这么干的。然后我们接着说:“在0x0202中存什么,在0x0203中存什么,把0x0203中的值变为0x0201中的值…”

这些“0x0201”、“0x0202”、“0x0203”…这些数字儿是不是不太好记?写个代码是不是头都大了?
于是聪明的先人给想了个办法,把这些地址换成代号,“0x0201”我叫x,“0x0202”我给他起个名字叫y,“0x0203”我给他起个名字叫z…

于是 “计算机,在0x0201地址内存一个数100”。就变成了var x int =100
而这个这个代号就是变量。

0x0201地址    =============》   100

0x0201地址    ======》X ===》   100

果然,计算机界中的任何问题,都可以通过加一个中间层来解决。(#.#)

最后,计算机会在内存中存代号和变量

你可能感兴趣的:(图解golang的那些事儿)