登录
首页 >  Golang >  Go问答

在同一个函数中使用多个 Go 例程是否会造成变量冲突?

来源:stackoverflow

时间:2024-02-08 12:09:20 112浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《在同一个函数中使用多个 Go 例程是否会造成变量冲突?》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我的问题可能很愚蠢,但请耐心等待。如果两个 go 例程调用同一个函数,它们会共享该函数中的变量吗?在函数内部声明变量并自由使用是否安全?

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

func func1(a int) {
 something := a
 // do something
}

在上面的代码中,当两个go例程调用同一个函数时,它们会互相妨碍彼此的变量声明吗?如果go例程不按顺序或其他什么情况,something的值会改变吗?


正确答案


会阻碍变量声明 - 不会。本质上它是一个函数..所以如果你在函数内声明变量..就不会有任何问题并且它可以正常工作。

但是如果变量不是在函数内部声明而是在函数范围之外声明,那么 go 例程的顺序将阻碍该值 例如

import (
    "fmt"
    "time"
)

var something int

func test(a int) {
    something += a
    fmt.Println("something", something)
}

func main() {
    fmt.Println("Testing Something")
    go test(20)
    go test(3)
    time.Sleep(1 * time.Second) // crude way without using channels or waitgroup.
}

理论要掌握,实操不能落!以上关于《在同一个函数中使用多个 Go 例程是否会造成变量冲突?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>