Любая программа может взаимодействовать с любым каналом в своей области действия , как и любая другая переменная.Неважно, где был создан канал.Однако важно то, что у подпрограмм, взаимодействующих через поток, есть ссылка на канал.
Причина, по которой "разветвляющаяся" или "родительская" подпрограмма обычно создает канал, заключается в том, что если дочерний элемент создалканал, у него не было бы никакого способа поделиться им с родителем.Подумайте:
go func(){
ch := make(chan int)
}
// how would we refer to `ch` out here?
Неважно, кто создает канал, нет понятия «владение» канала.Но программы, записывающие канал, должны ссылаться на него, поэтому они создаются в «родительском» потоке и передаются или передаются в программу.В противном случае родитель не сможет получить канал от ребенка (вы можете передать канал в канал, но это доказывает это!)