12

我是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)
}

编译错误是“错误声明且未使用”。但我想我在 for 语句中使用了 err。为什么编译器会输出这个错误?

4

1 回答 1

24

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

于 2013-09-05T02:49:49.283 回答