package main
import (
"fmt"
"runtime"
"sync"
"time"
)
func main() {
intInputChan := make(chan int, 50)
var wg sync.WaitGroup
for i := 0; i < 3; i++ {
wg.Add(1)
go worker(intInputChan, wg)
}
for i := 1; i < 51; i++ {
fmt.Printf("Inputs. %d \n", i)
intInputChan <- i
}
close(intInputChan)
wg.Wait()
fmt.Println("Existing Main App... ")
panic("---------------")
}
func worker(input chan int, wg sync.WaitGroup) {
defer func() {
fmt.Println("Executing defer..")
wg.Done()
}()
for {
select {
case intVal, ok := <-input:
time.Sleep(100 * time.Millisecond)
if !ok {
input = nil
return
}
fmt.Printf("%d %v\n", intVal, ok)
default:
runtime.Gosched()
}
}
}
ошибка брошена есть.Почему все горуты спит - тупик. Идентификация узкого места
Неустранимая ошибка: все горуты спит - тупик!
goroutine 1 [semacquire]: синхронизации (* WaitGroup) .Wait (0xc082004600) C:. /go/src/sync/waitgroup.go: 132 + 0x170 main.main() Е:/Перейти /go_projects/go/src/Test.go:22 + 0x21a
Вместо того, чтобы писать 'вар sync.WaitGroup' написать РГ' РГ: = новый (sync.WaitGroup) ', и вы никогда не будете повторите эту ошибку! –
-1: [Некоторые вопросы по-прежнему не соответствуют теме, даже если они вписываются в одну из категорий, перечисленных выше: Вопросы, требующие помощи по отладке («почему этот код не работает?») Должны включать в себя желаемое поведение, конкретную проблему или ошибки и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без четкой постановки проблемы не полезны другим читателям] (http://stackoverflow.com/help/on-topic) – Vector