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

Nan*_*iao 9 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)
}
Run Code Online (Sandbox Code Playgroud)

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

aro*_*ero 20

errfor 的内部是for的err外部阴影,它没有被使用(for的内部).发生这种情况是因为您正在使用短变量声明(使用:=运算符),该声明声明了一个新err变量,该变量隐藏了在for外声明的变量.