golang channel 需要注意的运行时行为

199 阅读1分钟

在go1.13.5试验多种情况下的运行时行为。注意看代码和注释。

package main

func main() {
	//var ch chan int
	//// fatal error: all goroutines are asleep - deadlock!
	//ch <- 1

	//var ch chan int
	//// fatal error: all goroutines are asleep - deadlock!
	//<- ch

	//var ch chan int
	//// panic: close of nil channel
	//close(ch)


	//ch := make(chan int, 1)
	//close(ch)
	//// panic: send on closed channel
	//ch <- 1

	//ch := make(chan int, 1)
	//close(ch)
	//// immediately return
	//<- ch
	//ch2 := make(chan int, 1)
	//ch2 <- 5
	//close(ch2)
	//// return one item
	//x := <- ch
	//log.Printf("x[%+v]", x)

	//ch := make(chan int, 1)
	//close(ch)
	//// panic: close of closed channel
	//close(ch)


	//ch := make(chan int)
	//select {
	//case <-ch: // fatal error: all goroutines are asleep - deadlock!
	//}
}