golang 有缓冲channel和无缓冲channel
无缓冲channel
chan无人接收会一直阻塞。
func Echo(nums []int) <-chan int { out := make(chan int)
// 这里一定要启动一个协程,不然会panic go func() { for _, n := range nums { out <- n } close(out) }() return out }
func TestEcho(t *testing.T) { nums := []int{1, 2, 3, 4} out := Echo(nums) for v := range out { fmt.Printf("%d", v) } }
有缓冲chan
不强制启动一个协程,先写入数据之后,后续程序慢慢读取。