Правило состоит не в том, чтобы обмениваться данными с общими переменными, а в том, чтобы передавать данные между процедурами go с каналами.
См. Притчи Go
Не делайтеt общаются, разделяя память, разделяют память, общаясь.
Либо создайте collectInt
канал и передавайте каждый int отдельно:
package main
import (
"fmt"
)
func main() {
collectInt := make(chan int)
go func() {
for i := 0; i < 10; i++ {
collectInt <- i
}
close(collectInt)
}()
for i := range collectInt {
fmt.Println(i)
}
}
Или передавайте весь набор данныхс каналом:
package main
import (
"fmt"
)
func main() {
collectInt := make(chan []int)
go func() {
var ints []int
for i := 0; i < 10; i++ {
ints = append(ints, i)
}
collectInt <- ints
}()
fmt.Println(<-collectInt)
}
doneChan
в этом случае не используется.