Golang中通道关闭与未关闭的问题探讨
Golang中通道关闭与未关闭的问题探讨
为什么第二次从通道获取输出时显示channel closed: false?
显然,channel closed: false等同于通道处于开启状态。但如果通道已经被关闭,它怎么可能还是开启状态呢?!
ch := make(chan int)
go func() {
ch <- 1
close(ch)
}()
v, isClosed := <-ch
fmt.Printf("received %d, is channel closed: %v\n", v, isClosed)
v, isClosed = <-ch
fmt.Printf("received %d, is channel closed: %v\n", v, isClosed)
更多关于Golang中通道关闭与未关闭的问题探讨的实战教程也可以访问 https://www.itying.com/category-94-b0.html
4 回复
对!用词不当,ok 并不是 Go 的关键字。感谢 @NobbZ
更多关于Golang中通道关闭与未关闭的问题探讨的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
kync: 我建议你使用
ok关键字
ok 不是关键字,它只是一个标识符,按照惯例用于布尔类型的第二个返回值来表示操作成功。
func main() {
if value, ok := someMap[key]; ok {
fmt.Println(value)
}
}
嗨,@cinematik,
接收操作的第二个结果并不是判断通道是否关闭,而是表示接收是否成功:https://golang.org/ref/spec#Receive_operator,这类似于从映射中查找结果时的操作:v, ok := a[x]

