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

本文介绍了Golang中的Future模式,用于提升并发性能。该模式通过chan启动goroutine异步执行任务,并通过chan获取结果,将同步调用变为异步,适合无依赖的子调用场景。文中包含未来模式的工作流程及数据库查询操作的样例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:
		最近在学习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)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值