英文:
What happens if you read a channel to nothing?
问题
你好!以下是翻译好的内容:
你可以将一个 goroutine 的通道读取到空值中吗?在这个语句中,这个通道读取的结果会去哪里?
go func() {
<-ctx.Done()
logger.Errorf("canceled: %v", ctx.Err())
}()
补充说明:
这段代码与使用空白标识符有什么不同吗?
go func() {
_ = <-ctx.Done()
logger.Errorf("canceled: %v", ctx.Err())
}()
请注意,我只提供翻译服务,不回答关于翻译内容的问题。
英文:
Can you read a goroutine channel into nothing? where does this channel read go to in this statement?
go func() {
<-ctx.Done()
logger.Errorf("canceled: %v", ctx.Err())
}()
Addition:
Would this code be any different than if I used the blank identifier
go func() {
_ = <-ctx.Done()
logger.Errorf("canceled: %v", ctx.Err())
}()
答案1
得分: 9
是的,你可以这样做。
它不需要去任何地方。
Done
通道的目的通常只是为了标识完成事件,因此值并不重要,可以忽略。
这与调用函数但不将返回值分配给变量时的情况相同。
考虑以下示例:
func getInt() int {
return 1
}
func main() {
getInt() // 不会“去任何地方”
}
请参考以下示例的 playground:
https://play.golang.org/p/CA8P7gYpok
英文:
Yes, you can do that.
It does not need to go anywhere.
Purpose of the Done
channel usually is just to signal the done event, so the value is not relevant and can be ignored.
It is the same as when you call a function and don't assign the return values to variables.
Consider this:
func getInt() int {
return 1
}
func main() {
getInt() // does not "go anywhere"
}
See this playground showing those examples:
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论