私は初期化されていないチャネルを保持する構造体を持っています。私はそれに書き込むとき初期化されていないチャネルはどのように動作しますか?
、ルーチンが期待通りにブロックしているが、読者は何かがパイプであることを通知されることはありません。
私はエラーがなく、何を行っているのだろうと驚いています。例えばベローズで
、どちらのメッセージpushed
もgot it
が印刷されています。 (コメントを外して使う初期とそれが魅力のように動作します)
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")
}
ここで遊び場がhttps://play.golang.org/p/76zrCuoeoh
です(私はチャンネルを初期化する必要があります知っている、これは質問の目的ではない、私が知りたいです何が非初期化チャンネルを移動中に起こっている。)