看下面的代码片段
package main
import (
"fmt"
"time"
)
func sender(ch chan string) {
ch <- "Hello"
ch <- "Foo"
ch <- "and"
ch <- "Boo"
close(ch)
}
func main() {
ch := make(chan string)
go sender(ch)
for {
select {
case value := <-ch:
fmt.Println(value)
case <-time.After(time.Second * 2):
fmt.Println("Return")
return
}
}
}
结果我得到了空白输出和 time.After 将永远不会到达。为什么?
我注意到,当我尝试从关闭的通道接收值时,它将从类型接收零值。为什么我仍然可以从关闭的渠道获得价值?
我也可以检查也喜欢,
v, ok := <-ch
如果 ok 为 false,则通道关闭。
明月笑刀无情
相关分类