1、写go程序的时候一定要牢记主线程不能阻塞,一旦阻塞就崩溃,就怕那种某种情况下偶尔会出现几下阻塞的,一定要杜绝。
2、select case的执行顺序是乱的,不确定的
3、写入管道的时候,一定要保证管道没有被阻塞写否则会崩溃,读取阻塞管道的时候关闭管道会读取到一个0值和一个false ok值
写入chan的时候,chan满了,此时写入数据会崩溃么?有应用场景吗 如果在一个goroutine写chan 即使满了也不会崩溃的 会被阻塞掉
测试代码:
func test_chan() {
c := make(chan int, 2)
go func() {
c <- 1
fmt.Println("c1")
c <- 2
fmt.Println("c2")
c <- 3
fmt.Println("c3")
c <- 4
fmt.Println("c4")
c <- 5
fmt.Println("c5")
}()
fmt.Println(<-c, <-c)
time.Sleep(2 * time.Second)
fmt.Println("len", len(c))
}
//输出
c1
c2
c3
1 2
c4
len 2
#2