:= 左侧的非名称

我正在练习/尝试一些同步机制go

为什么最后一次for迭代无法将缓冲通道保存的值分配给valchan切片mysl

错误是

./myprog.go:28:7:非名称 mysl[i] 位于 := 的左侧

package main


import (

    "sync"

)


const NUM_ROUTINES = 2


func 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

    }

}


智慧大石
浏览 98回答 1
1回答

千万里不及你

您正在使用“短变量声明”语法。从语言规范来看:它是带有初始化表达式但没有类型的常规变量声明的简写...与常规变量声明不同,短变量声明可以重新声明变量,前提是这些变量最初在同一块(或参数列表,如果该块是函数体)中以相同类型声明,并且至少有一个非空变量是新的。换句话说:您的代码尝试重新声明mysl[i]. 这不符合“至少一个非空变量是新的”规则,因此编译器会抱怨。相反,您只想使用=运算符进行赋值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go