除了c家族的编程语言明确提供了直接通过指针运算操作内存的方式,其它语言大多屏蔽了这一操作,程序员直接操作内存往往不太安全,容易出现各种问题。go有着c的影子,保留了指针但又对指针的能力进行了削弱。在go中也不能直接进行指针运算来操作内存。但go对指针还是留了一扇不起眼的窗来进行指针运算,这扇窗就是unsafe包。
首先unsafe包的内容并不多,只有寥寥几个数据结构和函数。要使用unsafe包需要先了解内存对齐,对有c使用经验的朋友就比较简单了。数据在内存的存储并不是连续按着存放的,而是按照一定的对齐规则。使用对齐规则有一个最大的好处是避免cpu的二次读取,也就是说对齐后的数据cpu只需要读取一次。(此处不再细述原因,作者目前的知识层面也就到这儿,原因就是计算机的底层知识了)
unsafe,顾名思义,是不安全的,Go定义这个包名也是这个意思,让我们尽可能的不要使用它,如果你使用它,看到了这个名字,也会想到尽可能的不要使用它,或者更小心的使用它。
虽然这个包不安全,但是它也有它的优势,那就是可以绕过Go的内存安全机制,直接对内存进行读写,所以有时候因为性能的需要,会冒一些风险使用该包,对内存进行操作。在go的标准库中也有使用unsafe包的操作(比如:sync,runtime包等)
下面看unsafe提供的编程接口
golang-标准库(unsafe)
最新推荐文章于 2023-08-10 22:01:07 发布