通信的问题
来源:13-6 通过channel进行goroutine间的通信

城中城
2022-05-14
var wg sync.WaitGroup
func consumer(queue chan int) {
defer wg.Done()
data := <-queue
fmt.Println(data)
}
func main() {
/*
channel 提供了一种通信机制, 定向, python java 消息队列
*/
// 定义一个channel
//var msg chan int
// 初始化这个channel, 两种方式:
//msg := make(chan int) // 第一种初始化方式: 无缓冲
msg := make(chan int, 1) // 第二种初始化方式: 有缓冲空间
// 在 go 语言中, 使用 make 初始化的有三种, 1. slice 2. map 3. channel
msg <- 1 // 将1放入到channel中
wg.Add(1)
go consumer(msg)
msg <- 2
wg.Wait()
}
这里 下面这块代码 是不是有可能有问题
因为 可能执行协程的过程
主 先存入了 2
又因为 缓冲空间 为 1
导致报错呢?
msg <- 1 // 将1放入到channel中
wg.Add(1)
go consumer(msg)
msg <- 2
写回答
1回答
-
缓存空间为1, 没有消费之前, 是无法放入的,这里会一直等到直到有空间为止
022023-02-28
相似问题