图解Go的unsafe.Pointer
Posted 菜刚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图解Go的unsafe.Pointer相关的知识,希望对你有一定的参考价值。
相信看过Go源码的同学已经对unsafe.Pointer
非常的眼熟,因为这个类型可以说在源码中是随处可见:map
、channel
、interface
、slice
…但凡你能想到的内容,基本都会有unsafe.Pointer
的影子。
看字面意思,unsafe.Pointer
是“不安全的指针”,指针就指针吧,还安不安全的是个什么鬼?
接下来,我们就来了解一下Go的这个“不安全的指针”unsafe.Pointer
。
什么叫变量
在了解指针之前,我们有必要先了解一下什么叫“变量”。
其实变量就是一个内存地址的名字,这听起来可能有些奇怪:指针不是地址码?
听我细细来讲:此地址非彼地址。通常,我们要在计算机内存中存数据,我们会怎么做?
我们肯定说:“计算机,在0x0201地址内存一个数100”。就这一句话,别看它糙,实际上在计算机中真就这么干的。然后我们接着说:“在0x0202中存什么,在0x0203中存什么,把0x0203中的值变为0x0201中的值…”
这些“0x0201”、“0x0202”、“0x0203”…这些数字儿是不是不太好记?写个代码是不是头都大了?
于是聪明的先人给想了个办法,把这些地址换成代号,“0x0201”我叫x,“0x0202”我给他起个名字叫y,“0x0203”我给他起个名字叫z…
于是 “计算机,在0x0201地址内存一个
以上是关于图解Go的unsafe.Pointer的主要内容,如果未能解决你的问题,请参考以下文章
Go语言阅读小笔记,来自知呼达达关于unsafe.Pointer的分享.