Я думаю, что ваш главный поток ожидает, что что-то придет с канала
func main() {
channel := make(chan int)
go func() {
time.Sleep(3*time.Second)
channel <- 1 // Sending something to the channel to let the main thread continue
channel <- 2
}()
for {
fmt.Println("../");
<-channel // Waiting for something to come from the channel
}
}
относительно ваших конкретных вопросов:
Если в goroutine есть ожидание, почемуосновная программа ожидает его?
Не ждет, вероятно, ожидает на канале.
Я прочитал, что основная программа должна иметьвремя ожидания, поскольку управление передается обратно ему сразу после вызова goroutine.
Если ваш основной канал не ожидал на канале (или стек в бесконечном цикле), он завершил работу и закрыл приложение.,GoRoutines закрывается с основным потоком (как потоки Java-демона)
Почему в Java не предусмотрены такие программы, как основной поток и дочерние потоки, где они могут работать параллельно?
Они действительно делают (: