
《Go语言核心编程》
package main
import (
"fmt"
"math/rand"
)
func GenerateIntA(done chan struct{})chan int{
ch :=make(chan int,5)
go func(){
Lable:
for{
select {
case ch<-rand.Int():
case <-done:
break Lable
}
}
close(ch)
}()
return ch
}
func GeneraterIntB(done chan struct{})chan int{
ch :=make(chan int,5)
go func() {
Lable:
for{
select {
case ch<-rand.Int():
case <-done:
break Lable
}
}
close(ch)
}()
return ch
}
func GeneraterInt(done chan struct{})chan int{
ch:=make(chan int)
send:=make(chan struct{})
go func() {
Label:
for{
select {
case ch<- <-GenerateIntA(send):
case ch<- <-GeneraterIntB(send):
case <-done:
send<- struct{}{}
send<- struct{}{}
break Label
}
}
close(ch)
}()
return ch
}
func main(){
//接收退出信号的chan
done:=make(chan struct{})
//启动生成器
ch:=GeneraterInt(done)
//获取生成器资源
for i:=0;i<10;i++{
fmt.Println(<-ch)
}
//停止生产
done<- struct{}{}
fmt.Println("stop gernarate")
}




近期评论