通道关闭与广播
===
- 向关闭的channel发送数据,会导致panic
- v,ok <-ch;ok为bool,true正常,false通道关闭
- 所有channel接收者都会在channel关闭时,立刻从阻塞等待中返回,ok = false.这个广播机制常被利用,进行多个订阅者同时发送信号
~~~
func TestService(t *testing.T) {
dataCh := make(chan int,10)
var wg sync.WaitGroup
wg.Add(1)
go production(dataCh,&wg)
wg.Add(1)
go consume(dataCh,&wg)
wg.Wait()
}
// 生产者
func production(ch chan int,wg *sync.WaitGroup) {
for i:=0;i<1000;i++{
ch<-i
}
close(ch)
wg.Done()
}
// 消费者
func consume(ch chan int,wg *sync.WaitGroup) {
forleep:
for {
select {
case data,ok := <-ch:
if ok {
fmt.Println(data)
}else{
break forleep
}
}
}
wg.Done()
}
~~~
- Hello World
- UDP
- UDP服务端
- UDP客户端
- UDP广播
- 错误处理
- 编写好的异常处理
- panic和recover
- 并发编程
- Hello Goruntine
- 共享内存并发机制
- RWMutex
- CSP并发机制
- 多路复用和超时控制
- 通道关闭与广播
- Context与任务的取消
- 只运行一次
- 按需任意任务完成
- 所有任务完成
- 补充:range channel注意实现
- 对象池
- sync.Pool临时对象池
- 单元测试
- 表格测试法
- Banchmark
- BDD
- 反射
- 利用反射编写灵活的代码
- Struct Tag
- 万能程序
- 常用架构模式
- Pipe-filter pattern
- Micro Kernel
- 性能分析
- 高性能代码
- sync.MAP分析
- Concurrent Map
- GC友好的代码
- Uber开发风格规范