Goroutines похожи на «фоновые задания» :
Основной Goroutine должен быть запущен для любых других Goroutines для запуска. Если основной Goroutine завершает работу, то программа будет прекращена, и никакой другой Goroutine не будет запущен.
1000 процедур, ожидающих сообщения на канале 'c', работают в фоновом режиме. Основной поток отправляет 1000 сообщений на канал 'c' и немедленно завершает свою работу.
Вывод 100 или около того целых чисел будет недетерминированным, поскольку каждая из ваших 1000 процедур будет выживать только до тех пор, пока основной поток отправит 1000 целых чисел в канал 'c'. Вам нужен основной поток, чтобы дождаться окончания 1000 горутин. Попробуйте использовать sync.WaitGroup
объект:
package main
import (
"fmt"
"sync"
//-"time"
)
func main() {
wg := sync.WaitGroup{}
c:=make(chan int)
for i:=0;i<1000;i++{
wg.Add(1)
go func() {
fmt.Println(<-c)
wg.Done()
}()
}
for j:=0;j<1000;j++{
c<-j
//-time.Sleep(time.Second/100)
}
wg.Wait()
}