淺析Golang如何向已關(guān)閉的chan讀寫(xiě)數(shù)據(jù)
1. 向已關(guān)閉的chan寫(xiě)
會(huì)直接panic,報(bào) send to close channel錯(cuò)誤
package main
func main() {
// 創(chuàng)建緩沖區(qū)為4的字符串chan
schoolChan := make(chan string, 4)
// 放入3個(gè)值
schoolChan <- "國(guó)防科大"
schoolChan <- "北京大學(xué)"
schoolChan <- "湖南大學(xué)"
// 關(guān)閉chan
close(schoolChan)
// 嘗試寫(xiě)數(shù)據(jù),會(huì)panic: send to close channel
schoolChan <- "中南大學(xué)"
}
2. 向已關(guān)閉的chan讀
會(huì)返回2個(gè)值,若已關(guān)閉的chan中還存在值,第二個(gè)值為true,第一個(gè)值為對(duì)應(yīng)的chan中的值,若已關(guān)閉的chan中不存在值,第二個(gè)值為false,第一個(gè)值為對(duì)應(yīng)chan類(lèi)型的零值
package main
import "fmt"
func main() {
// 創(chuàng)建緩沖區(qū)為4的字符串chan
schoolChan := make(chan string, 4)
// 放入3個(gè)值
schoolChan <- "國(guó)防科大"
schoolChan <- "北京大學(xué)"
schoolChan <- "湖南大學(xué)"
// 關(guān)閉chan
close(schoolChan)
// 向已關(guān)閉的chan讀
if school, isEmpty := <-schoolChan; isEmpty {
fmt.Println("school:", school)
}
// 向已關(guān)閉的chan讀
if school, isEmpty := <-schoolChan; isEmpty {
fmt.Println("school:", school)
}
// 向已關(guān)閉的chan讀
if school, isEmpty := <-schoolChan; isEmpty {
fmt.Println("school:", school)
}
// 向若chan不存在元素,則第二個(gè)參數(shù)的值為 false
if school, isEmpty := <-schoolChan; isEmpty {
fmt.Println("school:", school)
}
}
使用for循環(huán)遍歷chan,若chan未關(guān)閉則會(huì)堵塞等待chan放入元素,如chan關(guān)閉則取出chan內(nèi)所有元素并終止循序
package main
import (
"fmt"
)
func main() {
// 創(chuàng)建緩沖區(qū)為4的字符串chan
schoolChan := make(chan string, 4)
// 放入3個(gè)值
schoolChan <- "國(guó)防科大"
schoolChan <- "北京大學(xué)"
schoolChan <- "湖南大學(xué)"
// 關(guān)閉chan
close(schoolChan)
// for循環(huán)遍歷channel,會(huì)將已關(guān)閉的chan中緩沖區(qū)的數(shù)據(jù)取出完后終止循序
for school := range schoolChan {
fmt.Println("school:", school)
}
}到此這篇關(guān)于淺析Golang如何向已關(guān)閉的chan讀寫(xiě)數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Go向已關(guān)閉chan讀寫(xiě)數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Golang如何實(shí)現(xiàn)簡(jiǎn)易的令牌桶算法
這篇文章主要介紹了使用Golang如何實(shí)現(xiàn)簡(jiǎn)易的令牌桶算法問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Go中時(shí)間與時(shí)區(qū)問(wèn)題的深入講解
go語(yǔ)言中如果不設(shè)置指定的時(shí)區(qū),通過(guò)time.Now()獲取到的就是本地時(shí)區(qū),下面這篇文章主要給大家介紹了關(guān)于Go中時(shí)間與時(shí)區(qū)問(wèn)題的相關(guān)資料,需要的朋友可以參考下2021-12-12
golang實(shí)現(xiàn)數(shù)組分割的示例代碼
本文主要介紹了golang實(shí)現(xiàn)數(shù)組分割的示例代碼,要求把數(shù)組分割成多個(gè)正整數(shù)大小的數(shù)組,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
一文帶你感受Go語(yǔ)言空結(jié)構(gòu)體的魔力
在?Go?語(yǔ)言中,有一種特殊的用法可能讓許多人感到困惑,那就是空結(jié)構(gòu)體,本文將對(duì)Go空結(jié)構(gòu)體進(jìn)行詳解,準(zhǔn)備一杯你最喜歡的飲料或茶,隨著本文一探究竟吧2023-05-05

