码农桃花源
GitHub
知乎
掘金
博客园
Search…
码农桃花源
README
channel
06 - 从一个关闭的 channel 仍然能读出数据吗
12 - channel 有哪些应用
08 - 如何优雅地关闭 channel
10 - channel 在什么情况下会引起资源泄漏
00 - 什么是 CSP
channel 底层的数据结构是什么
09 - channel 发送和接收元素的本质是什么
11 - 关于 channel 的 happened-before 有哪些
04 - 向 channel 发送数据的过程是怎样的
03 - 从 channel 接收数据的过程是怎样的
07 - 操作 channel 的情况总结
05 - 关闭一个 channel 的过程是怎样的
map
interface
标准库
goroutine 调度器
编译和链接
反射
数组和切片
GC
Powered By
GitBook
06 - 从一个关闭的 channel 仍然能读出数据吗
从一个有缓冲的 channel 里读数据,当 channel 被关闭,依然能读出有效值。只有当返回的 ok 为 false 时,读出的数据才是无效的。
1
func
main
()
{
2
ch
:=
make
(
chan
int
,
5
)
3
ch
<-
18
4
close
(
ch
)
5
x
,
ok
:=
<-
ch
6
if
ok
{
7
fmt
.
Println
(
"received: "
,
x
)
8
}
9
10
x
,
ok
=
<-
ch
11
if
!
ok
{
12
fmt
.
Println
(
"channel closed, data invalid."
)
13
}
14
}
Copied!
运行结果:
1
received
:
18
2
channel closed
,
data invalid
.
Copied!
先创建了一个有缓冲的 channel,向其发送一个元素,然后关闭此 channel。之后两次尝试从 channel 中读取数据,第一次仍然能正常读出值。第二次返回的 ok 为 false,说明 channel 已关闭,且通道里没有数据。
具体过程可以参考“从 channel 接收数据的过程是怎样的”一节。
Previous
channel
Next
12 - channel 有哪些应用
Last modified
2yr ago
Copy link