Mam strukturę, która posiada kanał, który nie został zainicjowany.Jak zachowuje się kanał nie zainicjowany?
Kiedy zapisuję w nim, procedura jest blokowana zgodnie z oczekiwaniami, ale czytelnik nigdy nie otrzymuje powiadomienia, że coś jest w rurze.
Jestem zaskoczony, że nie ma błędu i zastanawiam się, co robi Go.
W poniższym przykładzie nie są drukowane ani wiadomości pushed
ani. (Odkomentuj intialization i będzie działać jak czar)
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")
}
Oto zabaw https://play.golang.org/p/76zrCuoeoh
(wiem powinna zainicjować kanał, to nie jest cel pytanie, chcę wiedzieć co się dzieje w Go z niezainicjowanymi kanałami.)