有代码时:
package main
import (
"os"
"os/signal"
)
func main() {
sig := make(chan os.Signal, 1)
signal.Notify(sig)
<-sig
}
运行没有问题,当然,阻塞直到你发送一个中断程序的信号。
但:
package main
func main() {
sig := make(chan int, 1)
<-sig
}
抛出此错误:
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
main.main()
/home/user/project/src/main.go:5 +0x4d
exit status 2
虽然我理解为什么从int通道读取会导致死锁,但我只是怀疑它os.Signal不会,因为它的通道可能会遭受来自“外部”的写入,因为它处理信号并且它们来自程序外部。
我的怀疑有点正确吗?如果是这样,运行时如何处理与其他通道类型不同的情况?
谢谢!
慕哥6287543
湖上湖
随时随地看视频慕课网APP
相关分类