左侧的非名称:= [duplicate]

问题描述 投票:-1回答:1

我正在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
    }
}
go synchronization channel
1个回答
2
投票

您正在使用“短变量声明”语法。从language specification

这是带有初始值设定项表达式但没有类型的常规变量声明的简写形式>

...

与常规变量声明不同,简短的变量声明可以重新声明变量,前提是它们最初是在相同类型的同一块中(或者如果该块是函数体,则在参数列表中)早先声明的类型,并且至少一个非空白变量是新变量。

不同地输入:您的代码尝试重新声明mysl[i]。这不符合“至少有一个非空白变量是新的”规则,因此编译器会抱怨。相反,您只想执行一个分配-使用=运算符。

© www.soinside.com 2019 - 2024. All rights reserved.