Search code examples
for-loopgoinitializationscopes

Golang File reader scopes mistake


I'm trying to understand difference between two file-reading cases.

Code below works fine. We reading file line-by-line to the variable:

reader := bufio.NewReader(file)

var line string
for err != io.EOF {
    line, err = reader.ReadString('\n')
    log.Println(line)
}

But if I want to init (using reader) in for scope reader will infinitely read only first line of code:

reader := bufio.NewReader(file)

var line string
for line, err = reader.ReadString('\n'); err != io.EOF; {
    log.Println(line)
}

Please, explain me why it happens? Thanks


Solution

  • Move it from initialization (Which runs only once) to post-statement. Change it to

    for line, err = reader.ReadString('\n'); err != io.EOF; line, err = reader.ReadString('\n') {
        log.Println(line)
    }