У меня есть функция, которая принимает массив int и выводит их в канал.
func Dump(a []int, ch chan int) {
for i := range a {
ch <- i
}
close(ch)
}
Эта основная сборка не выполняется:
func main() {
ch := make(chan int)
arr := []int{1, 2, 3, 4, 5}
Dump(arr, ch)
for i := range ch {
fmt.Printf("Got %v\n", i)
}
}
выдает эту ошибку:
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan send]:
main.Dump(0xc000078f48, 0x5, 0x5, 0xc00006e060)
/Users/300041738/go-workspace/src/test.go:7 +0x43
main.main()
/Users/300041738/go-workspace/src/test.go:15 +0x9b
exit status 2
Однако эта сборка:
func main() {
ch := make(chan int)
arr := []int{1, 2, 3, 4, 5}
go Dump(arr, ch)
for i := range ch {
fmt.Printf("Got %v\n", i)
}
}
Почему я должен написать, что идти впереди Dump?Я не хочу выгружать содержимое массива асинхронно.