Andrey Tsvetkov,
Хорошо, спасибо за поддержку! Детальнее разберу твой пример для ясности.
<-- After some time -->
К сожалению твой пример вывалился с фатальной ошибкой
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
main.main()
c:/Users/chapplin/go/src/example1/test.go:59 +0x3cf
goroutine 18 [chan receive]:
main.writer(0xc04202c0c0, 0xc042050070)
c:/Users/chapplin/go/src/example1/test.go:23 +0x5e
created by main.main
c:/Users/chapplin/go/src/example1/test.go:37 +0xf0
exit status 2
Для продолжения нажмите любую клавишу . . .
Но потом, закоментил последнюю строчку
// <- done
Код отработал без ошибок.
Тут вот дополнительный вопрос, по видимому sigfault в бесконечном цикле:
func writer(result <- chan string, done chan bool) {
for line := range result {
fmt.Println(line)
}
done <- true
}
Может необходимо дополнительную проверку, и выходить по break из цикла, типа такого:
func writer(result <- chan string, done chan bool) {
for line := range result {
if (<- done) == true {
break
}
fmt.Println(line)
}
done <- true
}
И в завершении программы уже делать done <- true
И зачем вообще этот done нужен, если он определен а явного использования нет?