Como um canal não inicializado se comporta?
Eu tenho uma estrutura que contém um canal que não foi inicializado.
Quando escrevo, a rotina está bloqueando conforme o esperado, mas o leitor nunca é notificado de que algo está no cano.
Estou surpreso que não haja erro e estou me perguntando o que está fazendo o Go.
No exemplo abaixo, nem a mensagempushed
nemgot it
são impressos. (Remova o comentário da inicialização e ela funcionará como um encanto)
type MyStruct struct {
over chan bool
}
func main() {
nonInitialized := &MyStruct{}
// nonInitialized.over = make(chan bool)
go func() {
for i := 0; i < 10; i++ {
select {
case <-nonInitialized.over:
fmt.Println("got it")
default:
// proceed
}
fmt.Println("do some stuff")
time.Sleep(10 * time.Millisecond)
}
panic("took too long")
}()
// push on the non initialized channel
fmt.Println("pushing")
nonInitialized.over <- true
fmt.Println("pushed")
}
Aqui é o playgroundhttps://play.golang.org/p/76zrCuoeoh
(Eu sei que devo inicializar o canal, esse não é o objetivo da pergunta. Quero saber o que está acontecendo no Go with canais não inicializados.)