如果你将一个通道读取为空,将会发生什么?

huangapple go评论111阅读模式
英文:

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() {
  &lt;-ctx.Done()
  logger.Errorf(&quot;canceled: %v&quot;, ctx.Err())
}()

Addition:

Would this code be any different than if I used the blank identifier

go func() {
  _ = &lt;-ctx.Done()
  logger.Errorf(&quot;canceled: %v&quot;, 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 &quot;go anywhere&quot;
}

See this playground showing those examples:

https://play.golang.org/p/CA8P7gYpok

huangapple
  • 本文由 发表于 2017年8月1日 10:22:08
  • 转载请务必保留本文链接:https://go.coder-hub.com/45427963.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定