Go 知识点(08) — 对未初始化的 channel 进行读写操作
生活随笔
收集整理的這篇文章主要介紹了
Go 知识点(08) — 对未初始化的 channel 进行读写操作
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1. 對未初始化的 channel 進行寫操作
先看下面代碼
func main() {var ch chan int // 只聲明,并沒有初始化fmt.Printf("ch is %v\n", ch) // ch is <nil>ch <- 1
}
運行上述代碼,會有如下輸出結(jié)果:
ch is <nil>
fatal error: all goroutines are asleep - deadlock!goroutine 1 [chan send (nil chan)]:
main.main()/home/wohu/project/go/src/demo/demo.go:8 +0xa5
exit status 2
從打印結(jié)果我們可以看到,當(dāng)僅僅聲明一個 channel 但是并沒有初始化時,對該通道進行寫操作會一直阻塞 。
2. 對未初始化的 channel 進行讀操作
先看下面代碼
func main() {var ch chan int // 只聲明,并沒有初始化fmt.Printf("ch is %v\n", ch) // ch is <nil>r := <-chfmt.Printf("r is %v\n", r)
}
運行上述代碼,會有如下輸出結(jié)果:
ch is <nil>
fatal error: all goroutines are asleep - deadlock!goroutine 1 [chan receive (nil chan)]:
main.main()/home/wohu/project/go/src/demo/demo.go:8 +0xb9
exit status 2
同樣結(jié)果會阻塞,此時報錯信息是 chan receive (nil chan) 。
所以對于未初始化的通道進行讀寫操作時都會造成阻塞。
3. 對未初始化的 channel 進行關(guān)閉操作
那么對未初始化的 channel 進行關(guān)閉操作,會出現(xiàn)什么情況,看下面代碼
func main() {var ch chan int // 只聲明,并沒有初始化fmt.Printf("ch is %v\n", ch) // ch is <nil>close(ch)
}
輸出結(jié)果為:
ch is <nil>
panic: close of nil channelgoroutine 1 [running]:
main.main()/home/wohu/project/go/src/demo/demo.go:10 +0x99
exit status 2
可以看到會有 panic 發(fā)生,所以在使用 channel 時一定要確保對其已經(jīng)初始化操作。
總結(jié)
以上是生活随笔為你收集整理的Go 知识点(08) — 对未初始化的 channel 进行读写操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022-2028年中国微滤膜行业市场发
- 下一篇: 2022-2028年中国激光全息膜行业市