go 关闭通道的必要性
生活随笔
收集整理的這篇文章主要介紹了
go 关闭通道的必要性
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
結(jié)論:
1. 遍歷一個未關閉的channel會造成死循環(huán)
2. 即使關閉了一個非空通道,我們?nèi)匀豢梢詮耐ǖ览锩娼邮盏轿醋x取的數(shù)據(jù)
3. 可以這樣理解,close()函數(shù)會往channel中壓入一條特殊的通知消息,可以用來通知channel接收者不會再收到數(shù)據(jù)。所以即使channel中有數(shù)據(jù)也可以close()而不會導致接收者收不到殘留的數(shù)據(jù)
4.?channel不需要通過close釋放資源,只要沒有goroutine持有channel,相關資源會自動釋放
實驗如圖(上面是未執(zhí)行close()的,造成死鎖;下面是執(zhí)行了close()的,正常遍歷結(jié)束):
代碼如下:
package main import "fmt"func main() {ch := make(chan int, 10)ch <- 1ch <- 2ch <- 3// 關閉函數(shù)非常重要,若不執(zhí)行close(),那么range將無法結(jié)束,造成死循環(huán)// close(ch)for v := range ch {fmt.Println(v)} }?
總結(jié)
以上是生活随笔為你收集整理的go 关闭通道的必要性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: go 并发安全map 分段锁实现
- 下一篇: 2-3树的由来