1. 程式人生 > 其它 >go管道channel幾點注意

go管道channel幾點注意

技術標籤:gogochannel

1.關閉channel後不能在傳送資料,會引起panic錯誤

package main

func main(){
	c := make(chan int, 10)
	c <- 1
	c <- 2
	close(c)
	c <- 3 //panic錯誤
}

執行檔案後結果panic錯誤

但是可以接收資料,接收資料返回零值

package main

import "fmt"

func main(){
	c := make(chan int, 10)
	c <- 1
	c <- 2
	close(c)	
	//關閉後可接收資料
	fmt.Println(<-c) //1
	fmt.Println(<-c) //2
	fmt.Println(<-c) //0
	fmt.Println(<-c) //0
}

執行檔案後結果:

使用for range 迴圈來列印接收的chan資料跳出迴圈

package main
 
import "fmt"

func main(){
	c := make(chan int, 10)
	c <- 1
	c <- 2
	close(c)
	for i := range c{
		fmt.Println(i)
	}
}

2.給一個 nil channel 傳送資料,造成永遠阻塞

package main

func main() {
        var c chan string
        c <- "hello world" // deadlock
}

從一個 nil channel 接收資料,造成永遠阻塞

package main

import "fmt"

func main() {
        var c chan string
        fmt.Println(<-c) // deadlock
}