(1)channel本质就是一个数据结构——队列
(2)数据先进先出
(3)线程安全,多goroutine访问时,不需要加锁,channel本身就是线程安全的
(4)channel是有类型的,一个int类型的channel只能存放int类型的数据
(5)定义声明chan:
- channel是引用类型
- channel必须初始化才能写入数据,即make后才能使用
- 一种类型的channel只能写入一种类型的数据
简单channel示例
- channel注意事项:
- channel只能存放指定数据类型
- channel的数据放满了就不能再放入了
- 如果从channel中取出数据就可以继续放入
- 在没有使用协程的情况下,如果channel的数据取完了,再取就会报deadlock
map chan示例
结构体 chan示例
结构体指针 chan 示例
interface chan示例
(1)channel的关闭
- 使用内置函数close可以关闭channel,当channel关闭后,就不能再向channel写数据了,但是仍然可以从该channel读取数据
(2)channel的遍历
- channel支持for-range的方式进行遍历,但是请注意以下细节:
- 在遍历时,如果channel没有关闭,则会出现deadlock的错误
- 在遍历时,如果channel已经关闭,则会正常遍历数据,遍历完后,就会退出遍历
(3)channel的关闭和遍历示例:
Original: https://www.cnblogs.com/vivianwenwen/p/15156456.html
Author: 温昀
Title: Go-channel
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585239/
转载文章受原作者版权保护。转载请注明原作者出处!