i got a wierd crash happening with my dicerolling program. It works fine but in the end it always says:
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]: main.main() /tärning.go:43 +0x746
goroutine 6 [chan receive]: main.dice(0xc00003a0c0, 0xc00003a120, 0xc0000100a0) /tärning.go:51 +0x106 created by main.main /tärning.go:40 +0x59a
goroutine 7 [chan receive]: main.dice(0xc00003a0c0, 0xc00003a120, 0xc0000100a0) /tärning.go:51 +0x106 created by main.main /tärning.go:41 +0x5d3 exit status 2
package mainimport ("fmt""sync""math/rand")type tärning struct { rubrik string minTal, maxTal int}type tärningsSvar struct { rubrik string svaret int}func main() { var wg sync.WaitGroup fmt.Println("Dags att kasta tärningar") var antal int fmt.Println("Hur många tärningar vill du använda?") fmt.Scan(&antal) job := make(chan tärning, antal) svar := make(chan tärningsSvar, antal) for i := 0; i < antal; i++ { fmt.Println("Vad ska tärning", i+1, "ha för rubrik?") var text string fmt.Scan(&text) fmt.Println("Vad ska vara minsta värdet på tärningen?") var minsta int fmt.Scan(&minsta) fmt.Println("Vad ska vara största värdet på tärningen?") var största int fmt.Scan(&största) job <- tärning{rubrik: text, minTal: minsta, maxTal: största} } go dice(job, svar, &wg) go dice(job, svar, &wg) wg.Wait() for svaren := range svar { fmt.Println("Tärning "+ svaren.rubrik +" fick: ", svaren.svaret) }}func dice(job chan tärning, svar chan tärningsSvar, wg *sync.WaitGroup) { wg.Add(1) for item := range job { text := item.rubrik min := item.minTal max := item.maxTal slump := (rand.Intn(max - min) + min) svar <- tärningsSvar{rubrik: text, svaret: slump} } wg.Done()}