执行下面的代码会发生什么?
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan int, 1000)
go func() {
for i := 0; i < 10; i++ {
ch <- i
}
}()
go func() {
for {
a, ok := <-ch
if !ok {
fmt.Println("close")
return
}
fmt.Println("a: ", a)
}
}()
close(ch)
fmt.Println("ok")
time.Sleep(time.Second * 100)
}
多运行几次偶然会打出来
15字口诀:“空读写阻塞,写关闭异常,读关闭空零”,往已经关闭的 channel 写入数据会 panic。
空读写阻塞,写关闭异常,读关闭空零
打卡