草庐IT

Go chan解析

1.chan数据结构   一个channel只能传递一种类型的值,类型信息存储在hchan数据结构中。elemtype代表类型,用于数据传递过程中的赋值;elemsize代表类型大小,用于在buf中定位元素位置。一个channel同时仅允许被一个goroutine读写,为简单起见,本章后续部分说明读写过程时不再涉及加锁和解锁。2.创建Chan创建channel的过程实际上是初始化hchan结构。其中类型信息和缓冲区长度由make语句传入,buf的大小则与元素大小和缓冲区长度共同决定。 makeChan源码如下:funcmakechan(t*chantype,sizeint)*hchan{ele