持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第28天,点击查看活动详情
生命不息,学习不止
题外话
今天周三了,今天起来外面雾蒙蒙,就像我昨天的基金一样,最近的中证指数不知道怎么了,没道理的往下走,走的时候把我的钱也带走了,我辛辛苦苦赚来的钱啊,好无情
废话不多说,上货
unsafe包
上回讲了一下gostringnocopy方法并提到了unsafe.Pointer()函数,那今天就索性来说说unsafe这个包和他几个关键性的函数
unsafe 顾名思义,就是一个不安全的包,主要功能是帮助go语言完成一些不符合go安全规则的操作
unsafe这个包的构成很简单,两个整数类型,一个指针,五个函数,如下,源码可以再unsafe包下的unsafe.go查看
type ArbitraryType int
type IntegerType int // 我不是小弟,我是演员
type Pointer *ArbitraryType
func Sizeof(x ArbitraryType) uintptr
func Offsetof(x ArbitraryType) uintptr
func Alignof(x ArbitraryType) uintptr
func Add(ptr Pointer, len IntegerType) Pointer //我跟演员一伙的
func Slice(ptr *ArbitraryType, len IntegerType) []ArbitraryType //我也跟演员一伙的
我这标题中的小弟有几个是演员,已经标记出来了,为什么说是演员呢,因为用的不多,总偷懒,像个演员,尤其是Add这个函数,居然只被调用了一次
type ArbitraryType int 并不是一个具体实际意义的整数类型,只是代表一个别名,就像interface{}当做任意的类型一样
type Pointer * ArbitraryType 上者可以勉强认为是任意类型的类型,那么这个便是代表任意类型的指针了
func Sizeof(x ArbitraryType) uintptr 函数的返回值是传入类型在内存中的字节大小,uintper已经在上一回提到过了,无符号整型
这个内存中的字节大小包含基本数据的固定部分,字符串中指针和长度部门,不包含具体数值,举个例子
int32 是四个字节,所以是4
func Offsetof(x ArbitraryType) uintptr 返回的是结构体中一个字段的偏移量,传入的参数格式为x.ff
func Alignof(x ArbitraryType) uintptr 返回的是对应参数的类型需要对齐的倍数,传入参数格式同上
你以为结束了
下一篇我们讲一下slice切片
大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划!