常见模式之二:使用时顺序模式
定义
顾名思义,起初goroutine不管是怎么个先后顺序,等到要使用的时候,需要按照一定的顺序来,也被称为未来使用模式
使用场景
-
每个goroutine函数都比较独立,不可通过参数循环复用
-
任务各自独立,结果组合依赖顺序
示例
package main
import (
"fmt"
"time"
)
func grepMySQL() <-chan string {
res := make(chan string)
go func() {
time.Sleep(time.Millisecond * 30)
res <- "grep data from MySQL"
}()
return res
}
func grepSQLServer() <-chan string {
res := make(chan string)
go func() {
time.Sleep(time.Millisecond * 10)
res <- "grep data from SQLServer"
}()
return res
}
func grepRedis() <-chan string {
res := make(chan string)
go func() {
time.Sleep(time.Millisecond * 20)
res <- "grep data from Redis"
}()
return res
}
func main() {
mysqlRes := grepMySQL()
sqlServerRes := grepSQLServer()
redisRes := grepRedis()
// 数据排序规则是 redis -- mysql -- sqlServer
resArr := []string{
<-redisRes,
<-mysqlRes,
<-sqlServerRes,
}
fmt.Println(resArr)
}