图解Go的unsafe.Pointer

Posted 菜刚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图解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地址内存一个

以上是关于图解Go的unsafe.Pointer的主要内容,如果未能解决你的问题,请参考以下文章

图解go反射实现原理

Go语言阅读小笔记,来自知呼达达关于unsafe.Pointer的分享.

Go语言:指针和unsafe.Pointer有什么区别?

[go]指针

强制定义 Go 结构以将 unsafe.Pointer() 转换为 C 结构

Go语言 unsafe.Pointer 浅析