Golang одна строка для цикла - PullRequest
0 голосов
/ 05 ноября 2018

Я пытался читать в файле CSV в Golang построчно с циклом for, который требовал оператора if с разрывом, чтобы увидеть, была ли ошибка чтения файла EOF. Я нахожу этот синтаксис довольно ненужным, когда я могу в java, например, прочитать строку в условном цикле while и одновременно проверить на ошибку EOF. Я думал, что объявление переменной внутри цикла for возможно, и я точно знаю, что вы можете сделать это с помощью операторов if в Golang. Выполнение:

if v := 2; v > 1{
    fmt.Println("2 is better than 1")
}

Первый фрагмент кода, который у меня есть, это то, что я знаю для работы в моей программе.

reader := csv.NewReader(some_file)

for {
    line, err := reader.Read()
    if err == io.EOF {
        break
    }
    //do data parsing from your line here
}

Я не знаю, является ли этот второй фрагмент концептуально возможным или просто синтаксически неправильным.

reader := csv.NewReader(some_file)

for line, err := reader.Read(); err != io.EOF {
    //do data parsing from your line here
}

Хотелось бы получить некоторые пояснения / преимущества / условности сделать это одним способом по другому, спасибо:)

1 Ответ

0 голосов
/ 06 ноября 2018

Это обычный способ написания более простых, нежели длинных, сложных, не так ли?

Итак, я считаю, что 1-я версия более традиционна, чем 2-я версия. Более того, петля for в вашей 2-й версии не правильная. Если вы хотите использовать это, то исправьте это следующим образом или как хотите:

for line, err := reader.Read(); err != io.EOF; line, err = reader.Read() {
    //do data parsing from your line here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...