Golang channel關閉的實現示例
使用內置函數close可以關閉channel,當channel關閉后,就不能再向channel寫數據了,但是仍然可以從channel中讀取數據。
一旦將channel關閉了,只能讀不能寫。相當于關閉管道就數據不能進入到隊列里面了,只能進行讀操作,只讀不寫。
channel支持for-range的方式進行遍歷,請注意兩個細節(jié)
(1)在遍歷時,如果channel沒有關閉,則回出現deadlock的錯誤
(2)在遍歷時,如果channel已經關閉,則會正常遍歷數據,遍歷完后,就會退出遍歷。
下面這種遍歷方式肯定是錯誤的,每次取出來數據長度都會減1,容量方式也一樣不是真實的長度,所以只能使用for rang方式。
func main() { intChan := make(chan int, 3) intChan <- 100 intChan <- 200 close(intChan) //關閉管道 //當管道關閉之后,讀取數據是沒有問題的 num := <-intChan fmt.Println(num) //從管道里面依次取出這樣的值,管道是先進先出的隊列,值也是按照順序取出來的 for v := range intChan { fmt.Println(v) } }
func main() { intChan := make(chan int, 3) //向管道寫入數據 intChan <- 1 num := 2 intChan <- num for i := 0; i < 1; i++ { v, ok := <-intChan fmt.Println(v, ok) } fmt.Println(".....................") close(intChan) for i := 0; i < 10; i++ { v, ok := <-intChan fmt.Println(v, ok) } } 1 true ..................... 2 true 0 false 0 false 0 false 0 false 0 false 0 false 0 false 0 false 0 false
到此這篇關于Golang channel關閉的實現示例的文章就介紹到這了,更多相關Golang channel關閉內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!