如果你把一个频道读到什么都会发生什么?

时间:2017-08-01 02:22:09

标签: go channel goroutine

你能读到一个goroutine频道吗?这个频道在这个陈述中的位置在哪里?

go func() {
  <-ctx.Done()
  logger.Errorf("canceled: %v", ctx.Err())
}()

增加:

此代码与使用空白标识符

时的代码有何不同
go func() {
  _ = <-ctx.Done()
  logger.Errorf("canceled: %v", ctx.Err())
}()

1 个答案:

答案 0 :(得分:6)

是的,你可以这样做。

它不需要去任何地方。

Done频道的目的通常只是发出完成事件的信号,因此该值不相关且可以忽略。

与调用函数时相同,不要将返回值赋给变量。

考虑一下:

func getInt() int {
    return 1
}

func main() {
    getInt()  // does not "go anywhere"
}

参见这个展示这些例子的游乐场:

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