Nan Xiao
Nan Xiao

Reputation: 17467

Why does golang compiler think the variable is declared but not used?

I am a newbee to golang, and I write a program to test io package:

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

The compile error is "err declared and not used". But I think I have used err in for statement. Why does the compiler outputs this error?

Upvotes: 13

Views: 11110

Answers (1)

aromero
aromero

Reputation: 25761

The err inside the for is shadowing the err outside the for, and it's not being used (the one inside the for). This happens because you are using the short variable declaration (with the := operator) which declares a new err variable that shadows the one declared outside the for.

Upvotes: 28

Related Questions