教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 [golang基础] golang开发思想(future模式)

[golang基础] golang开发思想(future模式)

发布时间:2021-04-26   编辑:jiaochengji.com
教程集为您提供[golang基础] golang开发思想(future模式)等资源,欢迎您收藏本站,我们将为您提供最新的[golang基础] golang开发思想(future模式)资源
前言:
		最近在学习golang,golang并发支持比较好,goroutine channel这个思想,大大提高了并行效率。既然golang有这个特性,我在做一些多个子调用的时候完全可以使用channel来将串行调用更改为异步调用,大大提高运行效率。所以今天就来学习一下future模式。

1. 什么是future模式

我们经常在编程的时候,经常会在一个函数里面调用多个子调用的情况,这些子调用相互之间没有依赖,如果串行调用,会耗时很长,这时就可以使用future模式来进行开发。
基本原理:

  • 使用chan作为函数参数
  • 启动goroutine调用函数
  • 通过chan传入参数
  • 做其他可以并行处理的事情
  • 通过chan异步获取结果

2. futrue好处?

future 最大的好处是将函数的同步调用转换为异步调用,适用于一个交易需要多个子调用且这些子调用没有依赖的场景。
工作流程图如下:

3. 样例

这里模拟查询数据库的操作,使用futurem模式进行开发

package main

import (
	"fmt"
	"time"
)

//future 模式
/**
* 1. 使用chan作为函数参数
* 2. 启动goroutine调用函数
* 3. 通过chan传入参数
* 4. 做其他可以并行处理的事情
* 5. 通过chan异步获取结果
*/
 type query struct {
 	//参数channel
 	sql chan string
 	//结果channel
 	result chan string
 }

 //执行Query
func execQuery(q query)  {
	//启动一个goroutine
	go func() {
		sql := <-q.sql
		//访问数据库函数 这里省略

		//查询结束后 输出结果通道
		q.result <- "result form "   sql
	}()
}

func main()  {
	//初始化query
	q := query{
		sql:    make(chan string,1),
		result: make(chan string,1),
	}
	// 开启一个goroutine 执行 sql查询
	go execQuery(q)
	//发送参数
	q.sql <- "select * from table"
	time.Sleep(1*time.Second)
	fmt.Println(<-q.result)
}
到此这篇关于“[golang基础] golang开发思想(future模式)”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
[golang基础] golang开发思想(future模式)
golang基础教程
Golang笔记:语法,并发思想,web开发,Go微服务相关
golang runtime 简析
学习golang开始前的准备工作
Go 零基础编程入门教程
为什么要学 Go
Golang开发语言的效率
golang Modules 依赖管理工具使用
用Golang写一个搜索引擎(0x0B)--- 第一部分结束

[关闭]
~ ~