某次面试面试官问了个很好的问题,可惜自己当时不了解,下面仔细分情况试一下。抽空看下golang里关于channel是如何实现的
问题: 向一个关闭的channel里,读数据,写数据,分别会发生什么?
1. 向一个关闭的channel里,写数据。
无论是否带缓存的channel,都会引发错误
panic: send on closed channel
goroutine 1 [running]:
main.main()
detail info
exit status 2
2. 向一个关闭的channel里,读数据。
1. 带缓存的channel
缓存里还有数据
返回 数据, true
缓存里没有数据
返回 数据类型未初始化零值, false
2. 不带缓存的channel
缓存里没有数据
返回 数据类型未初始化零值, false
缓存里有数据
执行不到 从缓存里读数据就报错。因为数据没人读就阻塞在哪里了