Skip to content

Close

What is wrong in the following code -

package main
import "fmt"
func main() {
ch := make(chan int)
go func() {
for i := range 10 {
ch <- i
}
}()
for {
val := <-ch
fmt.Println(val)
}
}

Channel Close Example

Solution #1 - Check the second argument of the return

package main
import "fmt"
func main() {
ch := make(chan int)
go func() {
for i := range 10 {
ch <- i
}
close(ch)
}()
for {
val, open := <-ch
if !open {
break
}
fmt.Println(val)
}
}

Solution #2 - Use range

package main
import "fmt"
func main() {
ch := make(chan int)
go func() {
for i := range 10 {
ch <- i
}
close(ch)
}()
for val := range ch {
fmt.Println(val)
}
}