我的问题可能很愚蠢,但请耐心等待。如果两个 go-routines 调用同一个函数,它们会共享该函数中的变量吗?在函数内部声明变量并随意使用是否安全?func main() { go func1(1) go func1(2)}func func1(a int) { something := a // do something}在上面的代码中,当两个 go-routines 调用同一个函数时,它们会阻碍彼此的变量声明吗?something如果 go 例程不按顺序或其他原因,值会改变吗?
1 回答
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
will they hinder the variable declaration- 不。本质上它是一个函数.. 所以如果你在函数内部声明变量.. 不会有任何问题并且它可以正常工作。
但是如果变量不是在函数内部而是在函数范围之外声明的,那么 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.
}
- 1 回答
- 0 关注
- 124 浏览
添加回答
举报
0/150
提交
取消
