You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多个Go协程是否会干扰同一函数内的变量?

Go协程调用同一函数时的局部变量隔离问题

核心结论

每个协程调用函数时,都会创建该函数的独立栈帧,函数内的局部变量完全隔离,不存在共享情况,直接使用是安全的。

针对示例代码的具体解释

func main() {
 go func1(1)
 go func1(2)
}

func func1(a int) {
 something := a
 // do something
}
  • 启动的两个协程各自拥有func1的独立执行上下文,something是func1内部的局部变量,每个协程里的something都是自己栈帧里的独立实例。
  • 两个协程之间完全不会干扰对方的变量,哪怕执行顺序混乱,各自的something值只会是传入的参数(1或2),不会出现意外变化。

额外说明

只有当函数内的变量引用了共享资源(比如全局变量、多个协程共同访问的堆内存对象等)时,才需要考虑并发安全问题。单纯使用函数内部声明的局部变量,在协程调用时不存在任何安全风险。

内容的提问来源于stack exchange,提问作者Divyanshu Juneja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 20:05:25