on the go way (三)channel 的用法

3)关闭无缓存的channel不会阻塞

package main 

import (
    "fmt"
)

func main(){
       cb := make(chan bool)
        close(cb)
        x := <-cb
        fmt.Printf("%#v\n", x)

        x, ok := <-cb
        fmt.Printf("%#v %#v\n", x, ok)

        ci := make(chan int)
        close(ci)
        y := <-ci
        fmt.Printf("%#v\n", y)
}

对于关闭的channel 没有buffer的channel 读出来的为对应的0值,但如果往里面写数据的话会产生panic

 

4)关闭有缓存的channel

 1 package main
 2 
 3 import "fmt"
 4 
 5 func main() {
 6         c := make(chan int, 3)
 7         c <- 15
 8         c <- 34
 9         c <- 65
10         close(c)
11         fmt.Printf("%d\n", <-c)
12         fmt.Printf("%d\n", <-c)
13         fmt.Printf("%d\n", <-c)
14         fmt.Printf("%d\n", <-c)
15 
16         c <- 1
17 }

关闭之后可以读出来~但是写入还是引发panic

 

5)nil channel发生阻塞

1 package main
2 
3 func main() {
4         var c chan int
5         <-c
6 }

 

posted on 2016-03-22 15:09  AAAAAApple  阅读(238)  评论(0编辑  收藏  举报

导航