select功能:
可以在select中监听多个chan,哪个chan来了就处理哪个,这样的好处是可以对多个chan进行并行处理。
下面给出一个例子,例子的功能是:
1、创建两个chan并向其中每间隔1.5秒写入一个值,chan收到值后直接写入worker chan中
2、worker chan收到值直接输出
3、select中加入了一些定时器的用法,供参考
main.go
package main
import (
"fmt"
"time"
)
func createIntChan() chan int{
c := make(chan int)
i := 0
go func() {
for{
time.Sleep(time.Millisecond*800)
c <- i
i++
}
}()
return c
}
func createWork() chan string {
worker := make(chan string)
return worker
}
func inputWork(n int,worker chan string,chanName string) {
v := fmt.Sprintf( "the value is %d from chan %s",n,chanName)
worker <- v
}
func main() {
c1,c2 := createIntChan(),createIntChan()
worker := createWork()
tm := time.After(time.Second*10)
tx := time.Tick(time.Second)
for{
select {
//10秒后关闭应用
case <-tm:
fmt.Println(&