我的問題可能很愚蠢,但請耐心等待。如果兩個 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 關注
- 97 瀏覽
添加回答
舉報
0/150
提交
取消