channel常常结合go程使用,作为通信消息队列

 

var testChan chan int
    fmt.Println(testChan) // nil  未初始化,没地址
    testChan = make(chan int,0)  
    fmt.Println(testChan)  //0xc420072180  完成了初始化

    //1.往channel写会阻塞,直到消费者把它读出来
    testChan<-1

    //2.往缓冲为N的channel写,写满N个值后阻塞
    testChan = make(chan int,10)  
    for i:=0;i<12;i++{
    fmt.Println(i)    //0,1,2,3,4,5,6,7,8,9
    }

    //3.往已经关闭的channel写数据会panic
    close(testChan)
    testChan<-1    //panic: send on closed channel
   
   //4.从一个已经关闭了的非缓冲channel读出来的值是默认值
   close(testChan)
    i:=<-testChan  //i=0

    i,ok=<-testChan //i=0,ok=false

  //5.从一个已经关闭了的缓冲channel能读出来的关闭前遗留的值
    testChan = make(chan int, 4)
    fmt.Println(testChan)
    for i := 0; i < 4; i++ {
        testChan <- i
    }
    close(testChan)
    for i := 0; i < 6; i++ {
        i := <-testChan
        fmt.Println(i)   //0,1,2,3,0,0
    }

 

相关文章:

  • 2022-12-23
  • 2021-08-05
  • 2022-12-23
  • 2021-09-14
  • 2021-10-22
  • 2022-12-23
  • 2022-12-23
  • 2022-01-30
猜你喜欢
  • 2020-09-27
  • 2018-11-09
  • 2022-12-23
  • 2022-12-23
  • 2022-02-27
相关资源
相似解决方案