我正在練習(xí)/嘗試一些同步機(jī)制go。為什么最后一次for迭代無法將緩沖通道保存的值分配給valchan切片mysl?錯誤是./myprog.go:28:7:非名稱 mysl[i] 位于 := 的左側(cè)package mainimport ( "sync")const NUM_ROUTINES = 2func sendValue(c chan string) { c <- "HelloWorld"}func main() { valchan := make(chan string, NUM_ROUTINES) var wg sync.WaitGroup wg.Add(NUM_ROUTINES) for i := 0; i < NUM_ROUTINES; i++ { go func() { sendValue(valchan) wg.Done() }() } wg.Wait() mysl := make([]string, 2, 2) for i := 0; i < NUM_ROUTINES; i++ { mysl[i] := <-valchan }}
1 回答

千萬里不及你
TA貢獻(xiàn)1784條經(jīng)驗 獲得超9個贊
您正在使用“短變量聲明”語法。從語言規(guī)范來看:
它是帶有初始化表達(dá)式但沒有類型的常規(guī)變量聲明的簡寫
...
與常規(guī)變量聲明不同,短變量聲明可以重新聲明變量,前提是這些變量最初在同一塊(或參數(shù)列表,如果該塊是函數(shù)體)中以相同類型聲明,并且至少有一個非空變量是新的。
換句話說:您的代碼嘗試重新聲明mysl[i]
.?這不符合“至少一個非空變量是新的”規(guī)則,因此編譯器會抱怨。相反,您只想使用=
運(yùn)算符進(jìn)行賦值。
- 1 回答
- 0 關(guān)注
- 146 瀏覽
添加回答
舉報
0/150
提交
取消