美文网首页
Go语言学习笔记-并发编程-channel的关闭和广播

Go语言学习笔记-并发编程-channel的关闭和广播

作者: noonenote | 来源:发表于2019-04-24 18:05 被阅读0次
  1. 向关闭的channel发送数据,会导致panic
  2. v,ok <-ch;ok为bool值,true表示正常接受,false表示通道关闭
  3. 所有的channel接收者都会在channel关闭时,立刻从阻塞等待中返回并返回且上述ok值为false。这个广播机制常被利用,进行向多个接收者同时发送信号。如退出信号
package channel_close

import (
    "fmt"
    "sync"
    "testing"
)

func dataProducer(ch chan int, wg *sync.WaitGroup) {
    go func() {
        for i := 0; i < 10; i++ {
            ch <- i
        }
        close(ch)

        wg.Done()
    }()

}

func dataReceiver(ch chan int, wg *sync.WaitGroup) {
    go func() {
        for {
            if data, ok := <-ch; ok {
                fmt.Println(data)
            } else {
                break
            }
        }
        wg.Done()
    }()

}

func TestCloseChannel(t *testing.T) {
    var wg sync.WaitGroup
    ch := make(chan int)
    wg.Add(1)
    dataProducer(ch, &wg)
    wg.Add(1)
    dataReceiver(ch, &wg)
    // wg.Add(1)
    // dataReceiver(ch, &wg)
    wg.Wait()

}

相关文章

  • Go语言学习笔记-并发编程-channel的关闭和广播

    向关闭的channel发送数据,会导致panic v,ok <-ch;ok为bool值,true表示正常接受,fa...

  • go并发通信

    go并发编程时,请记住:“不要通过共享内存来通信,而应该通过通信来共享内存” channel是Go语言在语言级别提...

  • Go 专栏|并发编程:goroutine,channel 和 s

    原文链接: Go 专栏|并发编程:goroutine,channel 和 sync[https://mp.weix...

  • go语言开发培训班哪里好

    Go作为专门为并发和大数据设计的语言,在编程界占据越来越重要的地位!越来越多的人开始学习go编程语言,go语言开发...

  • Go基础语法(九)

    Go语言并发 Go 是并发式语言,而不是并行式语言。 并发是指立即处理多个任务的能力。 Go 编程语言原生支持并发...

  • Go入门系列(九)并发

    目录一、goroutine二、channel Go语言的特色之一就是并发,Go 从语言层面就支持并发。同时实现了自...

  • Go并发

    Go语言中的并发编程 并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发,这也是Go语言流行的一个很...

  • Golang学习笔记-Channel

    Golang channel 作为Go的核心的数据结构和Goroutine之间的通信,是支撑Go语言高并发的关键 ...

  • go语言并发操作

    go语言实现并发 通过go 实现并发操作 执行上述代码,会间隔执行say方法 通过channel实现并发数据间的通...

  • Go并发编程Channel

    Channel 单纯地将函数并发执行是没有意义地,函数与函数需要交换数据才能体现并发执行函数地意义。Go语言的并发...

网友评论

      本文标题:Go语言学习笔记-并发编程-channel的关闭和广播

      本文链接:https://www.haomeiwen.com/subject/uyjpgqtx.html