入门必看
测试
package main
import (
"fmt"
)
// Producer 返回一个通道
// 并持续将符合条件的数据发送至返回的通道中
// 数据发送完成后会将返回的通道关闭
func Producer() chan int {
ch := make(chan int)
// 创建一个新的goroutine执行发送数据的任务
go func() {
for i := 0; i < 5; i++ {
//fmt.Println("TX_")
ch <- i
fmt.Println("TX")
}
fmt.Println("CLOSE")
close(ch) // 任务完成后关闭通道
}()
fmt.Println("DONE")
return ch
}
// Consumer 从通道中接收数据进行计算
func Consumer(ch chan int) int {
sum := 0
for v := range ch {
fmt.Println("RX")
sum += v
}
return sum
}
func main() {
ch := Producer()
res := Consumer(ch)
fmt.Println(res) // 25
}
1---
for range 和channl
for range会一直读取数据直到,chan关闭。无缓冲chan相当于一个开关,不存储数据,同步阻塞类型,如果没有for rang不断读取数据,chan不会有数据不断流入流出
2---