func main() {
msg := make(chan int)
select {
case <-msg:
fmt.Println("msg")
default:
fmt.Println("default")
}
msg <- 1
time.Sleep(time.Second * 1)
}
:default
fatal error: all goroutines are asleep - deadlock!
func main() {
msg := make(chan int)
go func() {
select {
case <-msg:
fmt.Println("msg")
default:
fmt.Println("default")
}
}()
msg <- 1
time.Sleep(time.Second * 1)
}
:msg
func main() {
msg := make(chan int)
go func() {
select {
case <-msg:
fmt.Println("msg")
default:
fmt.Println("default")
}
}()
time.Sleep(time.Second * 1)
msg <- 1
time.Sleep(time.Second * 1)
}
default
fatal error: all goroutines are asleep - deadlock!
本文通过三个Go语言示例探讨了通道(chan)的使用方法及其在并发编程中的作用。展示了如何利用协程(goroutine)与选择器(select)进行消息传递及处理,并讨论了死锁问题。
735

被折叠的 条评论
为什么被折叠?



