unsafe.Pointer其实就是类似C的void *,在golang中是用于各种指针相互转换的桥梁。golang的unsafe包很强大,基本上很少会去用它。它可以像C一样去操作内存,但由于golang不支持直接进行指针运算,所以用起来稍显麻烦。利用unsafe包,可操作私有变量,下面是具体例子。具体来讲解下main方法的实现:new是golang的内置方法,用来分配一段内存,并返回一个指针。其实我们可以获取它相对于v的偏移量,但我上面的代码并没有这样去实现。所以j是相对于v偏移了4个字节。unsafe.Sizeof方法用来得到一个值应该占用多少个字节空间。注意这里跟C的用法不一样,C是直接传入类型,而golang是传入值。之所以转成uintptr类型是因为需要做指针运算。
暂无评论