文章目录
Future模式
编程中经常遇到在一个流程中需要调用多个子调用的情况,这些子调用相互之间没有依赖,如果串行地调用,则耗时会很长,此时可以使用并发编程中的future模式。
 比如我们发送ajax请求的时候,页面进行后续处理,用户无需一直等待请求的结果,可以继续浏览或操作其他内容。
future 模式的基本工作原理:
- 使用chan作为函数参数
 - 启动goroutine调用函数
 - 通过chan传入参数
 - 做其他可以并行处理的事情
 - 通过chan异步获取结果
 
future模式流程图

下面是一个简单的例子:
package main
import (
	"fmt"
	"time"
)
// 一个查询结构体
// 这里的sql和result是一个简单的抽象,具体的应用可能是更复杂的数据类型
type query struct {
	// 参数Channel
	sql chan string
	// 结果Channel
	result chan string
}
// 执行Query
func execQuery(q query) {
	// 启动协程
	go func() {
		// 获取输入
		sql := <- q.sql
		// 访问数据库
		// 输出结果通道
		q.result <- "result from" + sql
	}()
}
func main() {
	// 初始化Query
	q := query{make(chan string, 1), make(chan string, 1)}
	// 执行Query, 注意执行的时候无须准备参数
	go execQuery(q)
	// 发送参数
	q.sql <- "select *fome table"
	// 做一些其它的事情, 这里通过Sleep描述
	time.Sleep(time.Second)
	// 获取结果
	fmt.Println(<-q.result)
}
// result from select * from table
 
其它并发模式
参考资料:
《Go语言核心编程》










