go nobuf chan

不带缓存区的, 必需要goroutine等待着从队列中取,才能放入无缓存的队列中

package main

import (
	"fmt"
	"time"
)

func produce(c chan int) {
	fmt.Println("produce start")
	time.Sleep(time.Second * 2)
	c <- 1000
	fmt.Println("produce finished")
}

func consume(c chan int) {
	data := <-c
	fmt.Println(data)
}

func main() {
	var c chan int
	fmt.Printf("c=%v\n", c)

	c = make(chan int)  /// 不带缓存区的, 必需要goroutine等待着从队列中取,才能放入无缓存的队列中
	go consume(c)  // goroutine 无所谓先后
	go produce(c)
	//go consume(c) // 初始化队列如果把这个消费队列的goroutine注释, 无法把数据放入队列,5秒之后直接结束
	// consume(c)
	time.Sleep(time.Second * 5)
}
posted @ 2022-03-10 21:50  ty1539  阅读(34)  评论(0编辑  收藏  举报