go管道channel幾點注意
阿新 • • 發佈:2021-01-20
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
}