为什么golang编译器认为变量已声明但未使用?

时间:2013-09-05 02:47:53

标签: go

我是golang的新手,我写了一个测试io包的程序:

func main() {
    readers := []io.Reader{
         strings.NewReader("from string reader"),
         bytes.NewBufferString("from bytes reader"),
    }

    reader := io.MultiReader(readers...)
    data := make([]byte, 1024)

    var err error
    //var n int

    for err != io.EOF {
        n, err := reader.Read(data)
        fmt.Printf("%s\n", data[:n])
    }
    os.Exit(0)
}

编译错误是“错误声明且未使用”。但我想我已经使用了错误的声明。为什么编译器输出此错误?

1 个答案:

答案 0 :(得分:19)

for中的err正在影响for之外的err,并且它没有被使用(for中的那个)。发生这种情况是因为您正在使用短变量声明(使用:=运算符),该声明声明了一个新的err变量,该变量会影响在for之外声明的变量。