专业五


channel通道

<p>通道:channel是一种特殊的类型,通道像一个传送带或者队列,总是遵循先入先出的规则,保证收发数据的顺序。每一个通道都是一个具体类型的导管,也就是声明channel的时候需要为其指定元素类型 如何定义通道类型: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=2677da7a51258cf0baa2bdaef5151027&amp;amp;file=file.png" alt="" /> 这样定义出来的是空值(nil),不能使用</p> <p>可以使用make初始化之后才能使用 例如: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=0f668ed219e82338ccfdf636bf3bc2cd&amp;amp;file=file.png" alt="" /></p> <p>通道channel操作: 发送 send <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=ba3f71541dc9ccafc34c0c236da8fc69&amp;amp;file=file.png" alt="" /> 接收 receive <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=85e3c427d49d0ff187542fc2c59ef7cc&amp;amp;file=file.png" alt="" /> 关闭 close <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=138642e9a778d29fe01667eed0ad84a4&amp;amp;file=file.png" alt="" /> 发送 接收都使用&lt;-符号</p> <p>chan &lt;-t 只写通道 &lt;-chan t 只读通道</p> <p>死锁是指两个或两个以上的协程的执行过程中,由于竞争资源而阻塞的现象</p> <p>死锁如何如何形成的: 1.一个通道在一个主goroutine协程里同时进行读和写。也会造成死锁 2.协程开启之前就放数据,还没有准备好,就放数据,就会造成死锁</p> <p>select:可以同时响应多个通道进行操作 <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=89b7295a6047e22b5bc769dc55f2d68e&amp;amp;file=file.png" alt="" /></p> <p>缓冲通道:先进先出的原则。第一个进去的第一个被读取到,可以理解为,一个从管道的一端放入,一个从管道的另一端读取。 <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=e41b13a158f2cca0a5f1555051cffae9&amp;amp;file=file.png" alt="" /> for range 就是遍历所有数据,当没有数据的时候也就循环结束。所以可以 替代 <strong>v,ok:=&lt;-ch1</strong> <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=970f75c034bda4b61acef22bbf45888b&amp;amp;file=file.png" alt="" /></p>

页面列表

ITEM_HTML