Go 中并发调用方法未输出的原因及正确实践
发布时间 - 2026-01-31 00:00:00 点击率:次go 程序在 `main` 函数返回后立即终止,若未同步等待 goroutine 完成,其内部逻辑(如 `fmt.println`)可能被直接丢弃,导致看似“无输出”。

- main 函数过早退出:go h.Myprint("need to go") 启动了一个 goroutine,而 main() 随即结束,整个进程终止,导致该 goroutine 甚至来不及被调度执行;
- 嵌套 goroutine 缺乏同步机制:Myprint 方法内部又启动了一层 goroutine(go func() { fmt.Println(...) }()),但既无等待逻辑,也无任何信号通知外部其已完成。
✅ 正确做法是使用同步原语(如 sync.WaitGroup)显式等待 goroutine 完成。以下是修复后的完整示例:
package main
import (
"fmt"
"sync"
"time" // 仅用于演示,实际应避免 sleep 替代同步
)
type Hello struct {
a int
}
func (h *Hello) Myprint(value string, wg *sync.WaitGroup) {
defer wg.Done() // 标记此 goroutine 完成
fmt.Println(value)
}
func main() {
h := &Hello{100}
var wg sync.WaitGroup
wg.Add(1)
go h.Myprint("need to go", &wg)
wg.Wait() // 阻塞直到所有 Add 的 goroutine 调用 Done()
}? 注意事项:
- ❌ 不要用 time.Sleep() 代替 WaitGroup —— 它不可靠(时间过短会失败,过长则低效),且违背 Go 并发设计哲学;
- ✅ WaitGroup 是最常用、最推荐的轻量级同步方式,适用于已知 goroutine 数量的场景;
- ⚠️ 若需传递结果或错误,应结合 channel 使用;若涉及共享状态修改,请额外注意数据竞争,必要时加 sync.Mutex;
- ? 可通过 go run -race main.go 启用竞态检测器,提前发现潜在并发 bug。
总结:Go 的并发不是“自动等待”,而是“自主调度 + 显式同步”。理解 main 的生命周期与 goroutine 的协作关系,是写出可靠并发程序的第一步。
# go
# ai
# 同步机制
# golang
# 并发
# channel
# bug
# 启动了
# 适用于
# 可通过
# 无任何
# 它不
# 不要用
# 最常用
# 既无
# 若需
# 过短
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何彻底卸载建站之星软件?
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Android Socket接口实现即时通讯实例代码
Laravel怎么为数据库表字段添加索引以优化查询
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
Laravel如何使用Telescope进行调试?(安装和使用教程)
php 三元运算符实例详细介绍
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
jQuery中的100个技巧汇总
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
微信小程序 require机制详解及实例代码
桂林网站制作公司有哪些,桂林马拉松怎么报名?
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
如何在不使用负向后查找的情况下匹配特定条件前的换行符
Swift中swift中的switch 语句
Python文件操作最佳实践_稳定性说明【指导】
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
如何用腾讯建站主机快速创建免费网站?
android nfc常用标签读取总结
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
如何撰写建站申请书?关键要点有哪些?
Laravel如何记录自定义日志?(Log频道配置)
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
如何快速搭建FTP站点实现文件共享?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
如何快速登录WAP自助建站平台?
公司门户网站制作流程,华为官网怎么做?
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
如何在自有机房高效搭建专业网站?
Bootstrap整体框架之JavaScript插件架构
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
Laravel storage目录权限问题_Laravel文件写入权限设置
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
千库网官网入口推荐 千库网设计创意平台入口
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
Python面向对象测试方法_mock解析【教程】
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
Swift开发中switch语句值绑定模式
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
如何获取PHP WAP自助建站系统源码?
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
简单实现Android验证码
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】

