0

0

Go语言中实现函数并行执行并安全获取返回值的完整教程

碧海醫心

碧海醫心

发布时间:2026-01-06 14:07:37

|

468人浏览过

|

来源于php中文网

原创

Go语言中实现函数并行执行并安全获取返回值的完整教程

通过 goroutine 和 channel 可以让两个耗时函数(如 f1(2) 和 f1(1))并发执行,使总耗时由 3 秒降至最长子任务耗时(2 秒),无需修改原函数签名,仅需在调用侧引入并发机制。

在 Go 中,函数默认是顺序执行的:runNotParallel() 先阻塞等待 f1(2) 完成(2 秒),再阻塞等待 f1(1)(1 秒),总计耗时 3 秒。要实现真正的并行执行,核心思路是将函数调用“卸载”到独立 goroutine 中,并通过 channel 同步收集结果

关键点在于:

  • 无需重写 f1:它保持纯函数、无副作用、签名不变,完全兼容并发调用;
  • 使用无缓冲 channel 作为同步信道:chan string 既传递结果,又天然实现“等待完成”的语义;
  • goroutine 启动即执行:go func() { out1
  • 主 goroutine 阻塞在 :这确保 f2 仅在两个结果都就绪后才被调用,逻辑正确性不受影响。

以下是优化后的 runParallel 实现:

func runParallel() {
    out1 := make(chan string)
    out2 := make(chan string)

    go func() { out1 <- f1(2) }()
    go func() { out2 <- f1(1) }()

    // 主协程在此处等待两个 channel 同时就绪(实际是依次接收,但因并发已就绪)
    f2(<-out1, <-out2)
}

⚠️ 注意事项:

Opus
Opus

AI生成视频工具

下载

立即学习go语言免费学习笔记(深入)”;

  • 若 f1 内部有共享状态或非线程安全操作(如操作全局变量、未加锁的 map),需额外同步;本例中 f1 是纯函数,完全安全。
  • channel 类型需与返回值严格匹配(如 string),避免类型错误。
  • 不建议省略 channel 变量声明直接写 go func(c chan

✅ 总结:Go 的并发模型强调“通过通信共享内存”,用 goroutine + channel 组合替代传统回调或 Future/Promise,简洁、安全、符合 Go 的哲学。只需三步即可改造串行调用为并行:声明 channel → 启动 goroutine 写入 → 主流程读取并消费。这是 Go 并发编程最典型、最推荐的实践模式。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

314

2023.08.02

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

73

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

96

2025.09.18

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

476

2023.08.10

Go中Type关键字的用法
Go中Type关键字的用法

Go中Type关键字的用法有定义新的类型别名或者创建新的结构体类型。本专题为大家提供Go相关的文章、下载、课程内容,供大家免费下载体验。

233

2023.09.06

go怎么实现链表
go怎么实现链表

go通过定义一个节点结构体、定义一个链表结构体、定义一些方法来操作链表、实现一个方法来删除链表中的一个节点和实现一个方法来打印链表中的所有节点的方法实现链表。

442

2023.09.25

go语言编程软件有哪些
go语言编程软件有哪些

go语言编程软件有Go编译器、Go开发环境、Go包管理器、Go测试框架、Go文档生成器、Go代码质量工具和Go性能分析工具等。本专题为大家提供go语言相关的文章、下载、课程内容,供大家免费下载体验。

246

2023.10.13

0基础如何学go语言
0基础如何学go语言

0基础学习Go语言需要分阶段进行,从基础知识到实践项目,逐步深入。php中文网给大家带来了go语言相关的教程以及文章,欢迎大家前来学习。

692

2023.10.26

PPT动态图表制作教程大全
PPT动态图表制作教程大全

本专题整合了PPT动态图表制作相关教程,阅读专题下面的文章了解更多详细内容。

13

2026.01.07

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.4万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号