我正在練習/嘗試一些同步機制go。為什么最后一次for迭代無法將緩沖通道保存的值分配給valchan切片mysl?錯誤是./myprog.go:28:7:非名稱 mysl[i] 位于 := 的左側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貢獻1784條經驗 獲得超9個贊
您正在使用“短變量聲明”語法。從語言規范來看:
它是帶有初始化表達式但沒有類型的常規變量聲明的簡寫
...
與常規變量聲明不同,短變量聲明可以重新聲明變量,前提是這些變量最初在同一塊(或參數列表,如果該塊是函數體)中以相同類型聲明,并且至少有一個非空變量是新的。
換句話說:您的代碼嘗試重新聲明mysl[i]
.?這不符合“至少一個非空變量是新的”規則,因此編譯器會抱怨。相反,您只想使用=
運算符進行賦值。
- 1 回答
- 0 關注
- 148 瀏覽
添加回答
舉報
0/150
提交
取消