Возьмем эти два фрагмента, например:
- Использование out chan из родительской области действия
func Worker() {
out := make(chan int)
func() {
// write something to the channel
}()
return out
}
- Передача out chan в качестве формального аргумента закрытие
func Worker() {
out := make(chan int)
func(out chan int) {
// write something to the channel
}(out)
return out
}
Я знаю, что передача аргументов в замыкание создает копию этого, а использование чего-либо из родительской области использует ссылку, поэтому я хочу знать, как это работает внутри в случае проход за копией. Есть ли два канала, один в родительской области, а другая копия передается в замыкание, и когда копия в замыкании записывается в копию этого значения, также создается в канале в родительской области? потому что мы возвращаем исходящий канал в родительской области действия вызывающей стороне, и значения будут использоваться только из этого канала.