Ezreal 书架 Ezreal 书架
Home
  • 《Go程序员面试笔试宝典》
  • 《RabbitMQ 实战指南》
  • 《深入理解kafka》
  • MySQL45讲
  • 透视HTTP协议
  • 结构化数据的分布式存储系统
  • Raft 共识算法
Home
  • 《Go程序员面试笔试宝典》
  • 《RabbitMQ 实战指南》
  • 《深入理解kafka》
  • MySQL45讲
  • 透视HTTP协议
  • 结构化数据的分布式存储系统
  • Raft 共识算法
  • 逃逸分析

  • 延迟语句

  • 数据容器

  • 通道

    • CSP是什么
    • 通道有哪些应用
    • 通道的底结构
    • 通道的关闭过程发生了什么
    • 从一个关闭的通道里仍然能读出数据吗
    • 如何优雅地关闭通道
    • 关于通道的 happens-before 有哪些
    • 通道在什么情况下会引起资源泄漏
    • 通道操作的情况总结
  • 接口

  • unsafe

  • context

  • Go程序员面试笔试宝典
  • 通道
ezreal_rao
2023-05-06

从一个关闭的通道里仍然能读出数据吗

从一个有缓冲的 channel 里读数据。,当 channel 被关闭,依然能读出有效值,只有当返回的 ok 为 false 时,读出的数据才是无效的。

来看一个例子:

func main() {
    ch := make(chan int, 5)
    ch <- 18
    close(ch)
    x, ok := <-ch
    if ok {
        fmt.Println("received: ", x)
    }
    x, ok = <-ch
    if !ok {
        fmt.Println("channel closed, data invalid.")
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

运行结果:

received:  18
channel closed, data invalid.
1
2

先创建一个有缓冲的 channel, 向其发送一个元素, 然后关闭此 channel。 之后两次尝试从 channel 中读取数据,第一次仍然能正常读出值;第二次返回的 ok 为 false,说明 channel 已关闭,且通道里没有数据。

#通道#csp#channel
上次更新: 5/9/2023, 10:58:32 AM
通道的关闭过程发生了什么
如何优雅地关闭通道

← 通道的关闭过程发生了什么 如何优雅地关闭通道→

最近更新
01
为什么我的MySQL会抖一下
07-15
02
HTTP 性能优化面面观
07-12
03
WebSocket:沙盒里的 TCP
07-12
更多文章>
Theme by Vdoing | Copyright © 2022-2024 Ezreal Rao | CC BY-NC-SA 4.0
豫ICP备2023001810号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式