Как правильно вернуть ошибку?
Есть задача: "Напишите функцию ReadCSV(file string) (<-chan []string, error) для чтения csv-файлов. В выходной канал должны передаваться строки из файла. Если возникла ошибка, верните ее описание." Вот мой код:
package main
import (
"encoding/csv"
"os"
"io"
)
func ReadCSV(file string) (<-chan []string, error) {
f, err := os.Open(file)
if err != nil {
return nil, err
}
defer f.Close()
out := make(chan []string)
go func() {
defer close(out)
reader := csv.NewReader(f)
for {
record, err := reader.Read()
if err == io.EOF {
break
}
if err != nil {
return
}
out <- record
}
}()
return out, nil
}
Как мне тут возвращать ошибку из горутины? Я не понимаю, объясните пожалуйста.
Ответы (1 шт):
Автор решения: Collapse
→ Ссылка
Как вариант, использовать что-то вроде пайплайна для обработки каналов и с помощью select читать оба Ваших канала, в таком случае если будет ошибка, то отработает case который читает ошибку, в ином случае отработает канал из которого Вы ожидаете данные.
select {
case <-data:
println("Получили данные")
return
case <-errChan:
println("Получили ошибку")
return
}