Home > front end >  golang - deadlock with gorutine
golang - deadlock with gorutine

Time:02-14

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.

  •  Tags:  
  • go
  • Related