Go Blocage et déblocage des canaux


Exemple

Par défaut, la communication sur les canaux est synchronisée; Lorsque vous envoyez une valeur, il doit y avoir un récepteur. Sinon, vous aurez fatal error: all goroutines are asleep - deadlock! comme suit:

package main

import "fmt"

func main() {
    msg := make(chan string)
    msg <- "Hey There"
    go func() {
        fmt.Println(<-msg)
    }()
}

Il existe une solution: utiliser des canaux tamponnés:

package main

import "fmt"
import "time"

func main() {
    msg :=make(chan string, 1)
    msg <- "Hey There!"
    go func() {
        fmt.Println(<-msg)
    }()
    time.Sleep(time.Second * 1)
}