在go编程中创建频道的最佳实践是什么?为了组织清楚,您是否应在主例程中创建所有渠道?

我已经查看了在子例程中创建通道的go代码。在子例程中创建主例程时,这些通道是否超出了主例程的限制?

请说清楚。提前致谢。

最佳答案

就像任何其他变量一样,任何goroutine都可以与其作用域中的任何通道进行交互。通道的创建位置并不重要。但是,重要的是,通过线程进行通信的goroutine都具有对通道的引用。

之所以使用“forking”或“parent” goroutine通常创建通道,是因为如果孩子创建了该通道,则将无法与父级共享该通道。考虑:

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

谁创建频道都没有关系,没有频道“所有权”的概念。但是写入通道的goroutine确实需要引用它,这就是为什么它在“父”线程中创建并与goroutine传递或共享的原因。否则,父母将无法从孩子那里获得频道(您可以在频道中通过频道,但是这种证明很重要!)

关于go - 在子例程中进入 channel ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53873962/

10-10 19:48