一尘不染

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

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

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


阅读 482

收藏
2020-07-02

共1个答案

一尘不染

errfor
的内部正在遮盖for的err外部,并且未被使用(for的内部)。发生这种情况的原因是,您正在使用简短的变量声明(与:=运算符一起使用),该声明声明了一个新err变量,该新变量遮盖了for外部声明的变量。

2020-07-02