我的問題可能很愚蠢,但請耐心等待。如果兩個 go-routines 調(diào)用同一個函數(shù),它們會共享該函數(shù)中的變量嗎?在函數(shù)內(nèi)部聲明變量并隨意使用是否安全?func main() { go func1(1) go func1(2)}func func1(a int) { something := a // do something}在上面的代碼中,當(dāng)兩個 go-routines 調(diào)用同一個函數(shù)時,它們會阻礙彼此的變量聲明嗎?something如果 go 例程不按順序或其他原因,值會改變嗎?
1 回答

一只名叫tom的貓
TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個贊
will they hinder the variable declaration- 不。本質(zhì)上它是一個函數(shù).. 所以如果你在函數(shù)內(nèi)部聲明變量.. 不會有任何問題并且它可以正常工作。
但是如果變量不是在函數(shù)內(nèi)部而是在函數(shù)范圍之外聲明的,那么 go 例程的順序?qū)⒆璧K該值,例如
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 關(guān)注
- 102 瀏覽
添加回答
舉報
0/150
提交
取消