채널에 쓰는 함수 (클로저가 아님)가 있습니다. 내가goroutine을 사용하여 채널을 통해 동시 함수를 읽는 중 오류가 발생하는 클로저
var wg sync.WaitGroup
wg.Add(1)
go DoStuff(somechan, &wg)
내부 DoStuff로 goroutine에서 해당 함수를 호출하고, 나는
for ; ; {
if err == io.EOF {
fmt.Println(err)
close(somechan)
fmt.Println("Closed channel")
break
} else if err != nil {
panic(err)
}
somechan <- Somefunc()
}
같은 일이 지금은 다른 goroutine을 사용하여 해당 채널에서 읽을 노력하고 있습니다. 실행 그러나
wgread.Add(1)
go func() {
for ; ; {
select {
case chanoutput, ok := <-somechan:
if ok == true {
fmt.Println(string(*chanoutput))
} else {
fmt.Println("DONE")
fmt.Println(ok)
wgread.Done()
break
}
}
}
}()
wgread.Wait()
, 나는
DONE
false
DONE
false
내가주는 경우에 wgread.Add (2)는 위 DONE과 거짓 3 인쇄 할 인쇄 후
panic: sync: negative WaitGroup counter
무엇입니까 타임스.
대기 그룹 델타를 1 씩 증가 시켰지만 음의 대기 그룹 카운터 오류가 발생하는 이유는 무엇입니까? 다른 동시 함수 또는 클로저를 사용하여 goroutine에서 읽는 가장 좋은 방법은 무엇입니까?
와
wgread.Wait()
-wgread.Add(1)
의 코드를 교체 문제를 말할 여기에 코드의 충분하지 않습니다. –