- channel 本身是一个数据结构队列
- 数据是先进先出的
- channel 本身是线程安全的
- channel 是有类型的,一个 string 的 channel 只能存放 string 类型结构
- channel 是引用数据类型,需要 make 后才能使用
- 给管道中写入数据事,不能超过其容量
- channel 关闭时,就不能再往里写数据了,读数据是没有问题的
- 可以使用 for range 遍历管道,但是要先 close 关闭 channel
示例1:
开启一个 writeChan 写成,写入数据
开启一个 readChan 读取数据
读和取都是操作的是同一个 channel 管道
主线程等读写完成后才能推出
/**
* @Author: v_bivwei
* @Description:
* @Date: 2020/1/19 17:25
*/
package main
import "fmt"
func writeData(intChan chan int) {
for i := 1; i <= 50; i++ {
intChan <- i
fmt.Println("writeData i= ", i)
}
close(intChan)
}
func readData(intChan chan int, exitChan chan bool) {
for {
v, ok := <-intChan
if !ok {
break
}
fmt.Println("readData v =", v)
}
exitChan <- true
close(exitChan)
}
func main() {
intChan := make(chan int, 10)
exitChan := make(chan bool, 1)
go writeData(intChan)
go readData(intChan, exitChan)
for {
_, ok := <-exitChan
if !ok {
break
}
}
fmt.Println("结束了")
}