chan
type hchan struct {
qcount uint // 当前队列中剩余元素个数
dataqsiz uint //环形队列长度,即可以存放的元素个数
buf unsafe.Pointer // 环形队列指针
elemsize uint16 // 每个元素的大小
closed uint32 // 标识关闭状态
elemtype *_type // 元素类型
sendx uint // 队列下标,指示元素写入时存放到队列中的位置
recvx uint // 队列下标,指示元素从队列的该位置读出
recvq waitq // 等待读消息的goroutine队列
sendq waitq // 等待写消息的goroutine队列
lock mutex // 互斥锁,chan不允许并发读写
}
slice
type slice struct {
array unsafe.Pointer
len int
cap int
}
map
type hmap struct { // map数据结构
count int // 当前保存的元素个数
...
B uint8 // 指示bucket数组的大小
...
buckets unsafe.Pointer // bucket数组指针,数组的大小为2^B
oldbuckets unsafe.Pointer // bucket数组指针,渐进式扩容时用来指向旧的bucket数组
}
type bmap struct { // bucket数据结构
tophash [8]uint8 // 存储哈希值的高8位
data [1]byte // key value数据:key/key/key/.../value/value/value/...
overflow *bmap // 溢出bucket的地址
}
网友评论