分享
  1. 首页
  2. 主题
  3. Go面试题

《Go题库·2》对已经关闭的channel进行读写操作会发生什么?

itmrtan · · 4287 次点击 · 开始浏览 置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

> **面试企业:** 深信服 ## 答案1:(溪尾) 1 . 读已关闭的channel 读已经关闭的channel无影响。 如果在关闭前,通道内部有元素,会正确读到元素的值;如果关闭前通道无元素,则会读取到通道内元素类型对应的零值。 若遍历通道,如果通道未关闭,读完元素后,会报死锁的错误。 > fatal error: all goroutines are asleep - deadlock! 2 . 写已关闭的通道 会引发panic: send on closed channel 3 . 关闭已关闭的通道 会引发panic: close of closed channel **总结:**对于一个已初始化,但并未关闭的通道来说,收发操作一定不会引发 panic。但是通道一旦关闭,再对它进行发送操作,就会引发 panic。如果我们试图关闭一个已经关闭了的通道,也会引发 panic。 ```go //1. 读一个已经关闭的通道 func main() { channel := make(chan int, 10) channel <- 2 close(channel) x := <-channel fmt.Println(x) } /*[Output]: 不会报错,输出2*/ // 遍历读关闭通道 func main() { channel := make(chan int, 10) channel <- 2 channel <- 3 close(channel) //若不关闭通道,则会报死锁错误 for num := range channel { fmt.Println(num) } } /*[Output]: 不会报错,输出2 3*/ //2. 写一个已经关闭的通道 func main() { channel := make(chan int, 10) close(channel) channel <- 1 } /*[Output]: panic: send on closed channel*/ //3. 关闭一个已经关闭的管道 func main() { channel := make(chan int, 10) close(channel) close(channel) } /*[Output]: panic: close of closed channel */ ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
4287 次点击 ∙ 3 赞
2 回复 | 直到 2022年07月19日 11:09:00
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)