日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Go 知识点(08) — 对未初始化的 channel 进行读写操作

發布時間:2023/11/28 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go 知识点(08) — 对未初始化的 channel 进行读写操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 對未初始化的 channel 進行寫操作

先看下面代碼

func main() {var ch chan int              // 只聲明,并沒有初始化fmt.Printf("ch is %v\n", ch) // ch is <nil>ch <- 1
}

運行上述代碼,會有如下輸出結果:

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

從打印結果我們可以看到,當僅僅聲明一個 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)
}

運行上述代碼,會有如下輸出結果:

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

同樣結果會阻塞,此時報錯信息是 chan receive (nil chan)

所以對于未初始化的通道進行讀寫操作時都會造成阻塞。

3. 對未初始化的 channel 進行關閉操作

那么對未初始化的 channel 進行關閉操作,會出現什么情況,看下面代碼

func main() {var ch chan int              // 只聲明,并沒有初始化fmt.Printf("ch is %v\n", ch) // ch is <nil>close(ch)
}

輸出結果為:

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 發生,所以在使用 channel 時一定要確保對其已經初始化操作。

總結

以上是生活随笔為你收集整理的Go 知识点(08) — 对未初始化的 channel 进行读写操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。