www說(shuō)
2023-03-21 10:22:13
我的問(wèn)題可能很愚蠢,但請(qǐng)耐心等待。如果兩個(gè) go-routines 調(diào)用同一個(gè)函數(shù),它們會(huì)共享該函數(shù)中的變量嗎?在函數(shù)內(nèi)部聲明變量并隨意使用是否安全?func main() { go func1(1) go func1(2)}func func1(a int) { something := a // do something}在上面的代碼中,當(dāng)兩個(gè) go-routines 調(diào)用同一個(gè)函數(shù)時(shí),它們會(huì)阻礙彼此的變量聲明嗎?something如果 go 例程不按順序或其他原因,值會(huì)改變嗎?
1 回答
一只名叫tom的貓
TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
will they hinder the variable declaration- 不。本質(zhì)上它是一個(gè)函數(shù).. 所以如果你在函數(shù)內(nèi)部聲明變量.. 不會(huì)有任何問(wèn)題并且它可以正常工作。
但是如果變量不是在函數(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)注
- 111 瀏覽
添加回答
舉報(bào)
0/150
提交
取消
