通信的问题

来源: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回答

bobby

2022-05-17

缓存空间为1, 没有消费之前, 是无法放入的,这里会一直等到直到有空间为止

0
2
bobby
回复
0沉默使者0
是的, 没有剩余的空间, 发送者就会阻塞
2023-02-28
共2条回复

Go+Python打造电商系统 自研微服务框架 抓紧高薪机遇

快速转型Go工程师,成为具备双语言后端能力的开发者

508 学习 · 530 问题

查看课程