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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Go 知识点(07)— 对已经关闭通道进行读写

發(fā)布時(shí)間:2023/11/28 生活经验 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go 知识点(07)— 对已经关闭通道进行读写 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天我們來看下對已經(jīng)關(guān)閉通道進(jìn)行讀寫會發(fā)生什么情況。

1. 對已關(guān)閉通道進(jìn)行寫操作

看下面代碼會輸出什么結(jié)果?

func main() {ch := make(chan string, 1)close(ch)ch <- "hello, world"fmt.Println(<-ch)
}

輸出結(jié)果為:

panic: send on closed channel

這個(gè)結(jié)果無論對于非緩沖通道還是緩沖通道都是一樣的,即對已經(jīng)關(guān)閉的通道進(jìn)行寫操作,會觸發(fā) panic

2. 對已關(guān)閉通道進(jìn)行讀操作

對已經(jīng)關(guān)閉的 channel 進(jìn)行讀操作要分為兩種情況:

  • 已關(guān)閉的 channel 沒有數(shù)據(jù);
  • 已關(guān)閉的 channel 仍然有數(shù)據(jù);

2.1 已關(guān)閉的 channel 沒有數(shù)據(jù)

看下面代碼

func main() {ch := make(chan int, 1)close(ch)// 第一次從通道中獲取數(shù)據(jù)value, ok := <-chfmt.Println(value) // 0fmt.Println(ok)    //  false// 第二次從通道中獲取數(shù)據(jù)fmt.Printf("<-ch is %v\n", <-ch) // <-ch is 0fmt.Println(ok)                  //  false
}

從上面代碼結(jié)果我們可以得出結(jié)論,對于已經(jīng)關(guān)閉的 channel ,如果通道內(nèi)已經(jīng)沒有數(shù)據(jù),那么可以不限次數(shù)的進(jìn)行讀取操作,但是讀到的值是該 channel 類型的零值,也就是上面代碼中 int 的零值 0。

如果該通道被聲明為 string 類型,那么其零值就為空字符串 ""

而從通道返回的第二個(gè)值,也就是標(biāo)志位 ok,則會一直為 false

2.2 已關(guān)閉的 channel 仍然有數(shù)據(jù)

查看下面代碼輸出結(jié)果

func main() {ch := make(chan int, 3)ch <- 1close(ch)// 第一次從通道中獲取數(shù)據(jù)value, ok := <-chfmt.Println("第一次從通道中獲取數(shù)據(jù) value", value) //  1fmt.Println("第一次從通道中獲取數(shù)據(jù) ok", ok)       //  true// 第二次從通道中獲取數(shù)據(jù)value, ok = <-chfmt.Println("第二次從通道中獲取數(shù)據(jù) value", value) //  0fmt.Println("第二次從通道中獲取數(shù)據(jù) ok", ok)       //  false
}

對于這種情況,從通道里面仍然可以獲取到之前存儲的數(shù)據(jù),同時(shí)第二個(gè)返回值 ok 的值為 true, 表示通道里面是有數(shù)據(jù)的。

但是當(dāng)通道里面的值被取完時(shí),就和上面 2.1 小節(jié)的結(jié)果一樣了。

3. 對通道操作的總結(jié)


總結(jié)

以上是生活随笔為你收集整理的Go 知识点(07)— 对已经关闭通道进行读写的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。