Собственно, упражняюсь с горутинами. Есть такой код:
func main() {
	var line chan string = make(chan string)
	var quit chan int = make(chan int)
	var input string
	go func() {
		for {
			fmt.Scan(&input)
			if input == "exit" {
				quit <- 0
				break
			}
			go calc(line, quit, input)
		}
	}()
	for str := range line {
		fmt.Println(str)
	}
}
func calc(line chan string, quit chan int, s string) {
	defer close(line)
	defer close(quit)
	select {
	case line <- s:
		line <- "Echo " + <-line
	case <-quit:
		line <- "Quit"
		return
	}
}В целом всё хорошо, кроме выхода из горутины. Если ввожу «exit», получаю вот такое сообщение о дедлоке:
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
main.main()
        main.go:22 +0x11d
goroutine 6 [chan send]:
main.main.func1()
        main.go:16 +0x125
created by main.main in goroutine 1
        main.go:12 +0xb9
exit status 2



