新しいlangに移動すると私はgoroutinesを使用する単純な再帰アルゴリズムを作成しようとしています。私はgoroutineからの出力を受け取るためにチャンネルを使用していますが、そうしようとすると「致命的なエラーが発生します:すべてのgoroutinesが眠っています - デッドロックです!エラー。私がチャンネルコードをコメントアウトすると、すべてうまく動作します。 これは私のコードですチャンネルを使用しているときにゴルーチンデッドロック
package main
import (
"fmt"
"sync"
)
func main() {
numbers := []int{2, -1, 10, 4, 3, 6, 22}
ch := make(chan []int)
wg := &sync.WaitGroup{}
wg.Add(1)
go testFunc(numbers, ch, wg)
wg.Wait()
result := <-ch
fmt.Println("Result: ", result)
}
func testFunc(numbers []int, ch chan []int, wg *sync.WaitGroup) {
defer wg.Done()
ch <- numbers
}
私は間違っていますか?私はgoroutineのチャンネルに値を割り当ててメインでそれを読んでいます。コミュニケーションするのに十分ではありませんか?
チャンネルから受信する前に、ゴルーチンを待っています。ここにはバッファされていないチャンネルがあるので、待機グループは必要ありませんし、ゴルーチンもまったく必要ありません。 – JimB