golang – deadlock with gorutine


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 (

func main() {
    var ch chan int
    for i := 0; i < 3; i++ {
        go func(idx int) {
            ch <- (idx + 1) * 2

    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


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)


There is an episode of justforfunc which explains how nil channels behave and why they are useful sometimes.

Answered By – The Fool

Answer Checked By – Jay B. (GoLangFix Admin)

Leave a Reply

Your email address will not be published.