我正在练习/尝试一些同步机制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 关注
- 95 浏览
添加回答
举报
0/150
提交
取消