чтение файла построчно на ходу - PullRequest
265 голосов
/ 06 января 2012

Я не могу найти функцию file.ReadLine в Go. Я могу понять, как быстро написать один, но мне просто интересно, что я здесь пропускаю. Как читать файл построчно?

Ответы [ 12 ]

1 голос
/ 23 ноября 2016

В приведенном ниже коде я читаю интересы из CLI, пока пользователь не нажмет ввод, и я использую Readline:

interests := make([]string, 1)
r := bufio.NewReader(os.Stdin)
for true {
    fmt.Print("Give me an interest:")
    t, _, _ := r.ReadLine()
    interests = append(interests, string(t))
    if len(t) == 0 {
        break;
    }
}
fmt.Println(interests)
0 голосов
/ 03 марта 2016

Мне нравится решение Lzap, я новичок в Go, Я хотел бы попросить lzap, но я не мог сделать это, у меня еще нет 50 баллов .. Я немного меняю ваше решение и дополняю код ...

package main

import (
    "bufio"
    "fmt"
    "io"
    "os"
)

func main() {
    f, err := os.Open("archiveName")
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    defer f.Close()
    r := bufio.NewReader(f)
    line, err := r.ReadString(10)    // line defined once 
    for err != io.EOF {
        fmt.Print(line)              // or any stuff
        line, err = r.ReadString(10) //  line was defined before
    }
}

Я не уверен, зачем мне снова проверять 'err', но в любом случае мы можем это сделать. Но главный вопрос ... почему Go не выдает ошибку с предложением => строка, err: = r.ReadString (10) внутри цикла? Он определяется снова и снова каждый раз, когда выполняется цикл. Я избегаю этой ситуации с моим изменением, любой комментарий? Я установил условие EOF в 'for' так же, как и в то время как. Спасибо

...