源码文件 runtime/chan.go
下面先看下makechan方法,新建channel
1.先校验elem的size,不能大于65536,如果大于,就抛出异常
2.继续校验分配内存不能过大, 不能超过maxAlign
3.如果channel的缓冲区大小为0,就给hchan分配一个空间
4.如果类型不是指针,那么就给hchan和buf 都分配空间
5.默认情况下,也就是包含指针,会给hchan和buf 都分配空间
6.最后再给channel设置几个属性的值,然后返回channel
+++++++++++++++++++++++++++++++++++++++++++
3.发送数据
发送数据实例:
ch <- 100
发送数据实现函数:
func chansend(c *hchan, ep unsafe.Pointer, block bool, callerpc uintptr) bool
ep指向要发送数据的首地址
4.接收数据
接收数据实例:
val := <- ch
接收数据实现函数: