【问题标题】:What happens if you read a channel to nothing?如果你把一个频道读成一无所有会发生什么?
【发布时间】:2018-01-07 17:43:39
【问题描述】:

你能把 goroutine 通道读成空吗?在这个语句中这个通道读到哪里去了?

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

加法:

如果我使用空白标识符,这段代码会有什么不同

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

【问题讨论】:

    标签: go channel goroutine


    【解决方案1】:

    是的,你可以这样做。

    它不需要去任何地方。

    Done 频道的目的通常只是通知 done 事件,因此该值不相关,可以忽略。

    这和你调用一个函数并且不将返回值分配给变量时是一样的。

    考虑一下:

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

    查看展示这些示例的游乐场:

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

    【讨论】:

      猜你喜欢
      • 2017-02-04
      • 1970-01-01
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      • 2019-01-09
      • 2010-11-15
      • 2020-03-13
      相关资源
      最近更新 更多