把平时的一些笔记放上来,主要是一些比较小的问题,这里是关于golang中的类型中须要记录的小知识点。golang
【1】能够是某些编译器能计算出结果的表达式数组
const { ptrSize = unsafe.Sizeof(unintptr(0)) strSize = len("Hello") }
【2】当常量的不指定类型和值,默认和上一行的常量的类型和值相同安全
const { x uint6 = 120 y s = "abc" z }
关键字:iota数据结构
const { a = iota // 0 默认为0 b // 1 默认递增1 c = 100 // 100 手动设置数据 d // 100 e = iota // 4 须要显式调用iota,计算c、d的位置 d // 5 }
特指:slice、map、chaneel函数
定义:使用type建立用户的自定义类型,包括基于现有的基础类型、结构体、函数建立新的类型。ui
注意:即便type指定了新的类型,只能代表有相同的数据结构,两个类型间没有任何关系,不能视道别名指针
具备相同声明的未命名类型视做同一种类型code
未命名类型转化规则:对象
能够经过unsafe.Pointer转换成uintptr进行指针加减法运算,但可能形成非法访问。接口
Pointer相似void 的万能指针,可用来转换指针类型,void 能安全持有对象成员,uintptr只是一种整数类型,不引用目标对象,没法阻止垃圾回收对象内存。
是否相等和版本实现有关,不等于nil,即便长度为0,对象依然合法存在,拥有合法的内存地址,和nil不同。在runtime/malloc.go中有个zerobase的全局变量,经过mallocgc分配的0长度的对象都使用这个地址。在栈上分配,为调用mallocgc函数。