1. 程式人生 > >golang 緩衝channel顯式的關閉通道

golang 緩衝channel顯式的關閉通道

對於緩衝channel可以使用range來讀取:

func main() {
	ch := make(chan int, 3)
	ch <- 1
	ch <- 2
	ch <- 3

	for c := range ch {
	    fmt.Println(c)
	}
}

上面例子可以正常讀取資料,但是會出現死鎖。主要由於range不等到通道關閉,不會結束讀取,阻塞當前的gorouting,導致死鎖。

顯式的關閉通道:

func main() {
	ch := make(chan int, 3)
	ch <- 1
	ch <- 2
	ch <- 3

	close(ch)
	for c := range ch {
		fmt.Println(c)
	}
}
被關閉的通道禁止資料寫入,是可讀的,可以從關閉的通道中讀取資料。