The code below is a code that puts a value into a channel and receives and print as much as you put in. I expected it to work, but an error occurs.
package main
import (
"fmt"
"time"
)
func main() {
var ch chan int
for i := 0; i < 3; i {
go func(idx int) {
ch <- (idx 1) * 2
}(i)
}
fmt.Println("result:", <-ch)
fmt.Println("result:", <-ch)
fmt.Println("result:", <-ch)
//do other work
time.Sleep(2 * time.Second)
}
Tested on playground - https://go.dev/play/p/FFmoSMheNfu
CodePudding user response:
You are using a nil channel. The type declaration is not enough, you need to use make to initialize the channel.
ch := make(chan int)
https://go.dev/play/p/L1ewulPDYlS
There is an episode of justforfunc which explains how nil channels behave and why they are useful sometimes.