为了账号安全,请及时绑定邮箱和手机立即绑定

:= 左侧的非名称

:= 左侧的非名称

Go
智慧大石 2023-07-31 17:01:59
我正在练习/尝试一些同步机制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]. 这不符合“至少一个非空变量是新的”规则,因此编译器会抱怨。相反,您只想使用=运算符进行赋值。


查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 66 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信