在子例程中转到Channel

pha*_*age -1 concurrency channel go

在编程中创建频道的最佳做法是什么?为了组织和清晰,您应该在主程序中创建所有通道吗?

我已经查看了在子例程中创建通道的代码.在子例程中创建主程序时,这些通道是否禁止进入主程序?

请澄清.提前致谢.

Dan*_*ell 6

任何goroutine都可以与其范围内的任何通道进行交互,就像任何其他变量一样.创建频道的位置并不重要.然而,重要的是通过线程进行通信的goroutine都具有对通道的引用.

"分叉"或"父"goroutine通常创建频道的原因是,如果孩子创建频道,则无法与父母共享频道.考虑:

go func(){
  ch := make(chan int)
}
// how would we refer to `ch` out here?
Run Code Online (Sandbox Code Playgroud)

谁创建频道并不重要,没有频道"所有权"的概念.但是写入通道的goroutines确实需要引用它,这就是它在"父"线程中创建并传递或与goroutine共享的原因.否则,父母将无法从孩子那里获得频道(你可以在一个频道中传递频道,但这证明了这一点!)