代码1
package main
import (
"fmt"
)
func main() {
ch := make(chan int)
ch <- 1
fmt.Println(<-ch) // 1
}
代码2
package main
import (
"fmt"
)
func main() {
ch := make(chan int, 1)
ch <- 1
fmt.Println(<-ch) // 1
}
问题:
为什么代码1会报死锁的错误,而代码2不会报错?
因为代码1的channel没有buffer,而代码2的channel设置了buffer为1。
没有buffer的channel只能通过另一个goroutine去读,否则就阻塞了。