go:1.16
type hchan struct {
qcount uint // chan里的元素数量
dataqsiz uint // chan底层循环数组长度
buf unsafe.Pointer // 指向底层循环数组指针,只针对有缓冲的channel
elemsize uint16 // chan中元素大小
closed uint32 // chan是否被关闭
elemtype *_type // chan中元素类型
sendx uint // 已发送元素在循环列表中的索引
recvx uint // 已接收元素在循环列表中的索引
recvq waitq // 等待接收的goroutine队列
sendq waitq // 等待发送的goroutine队列
// lock protects all fields in hchan, as well as several
// fields in sudogs blocked on this channel.
//
// Do not change another G‘s status while holding this lock
// (in particular, do not ready a G), as this can deadlock
// with stack shrinking.
lock mutex // 保护hchan中的所有字段
}
原文:https://www.cnblogs.com/why-blogs/p/15211441.html