Фрагмент не компилируется: нужны for path := range ch и defer, а не default. После такого исправления останется проблема отложенного закрытия всех файлов.
Какой вывод появится в консоли при запуске программы №79
Фрагмент не компилируется: нужны for path := range ch и defer, а не default. После такого исправления останется проблема отложенного закрытия всех файлов.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Укажите, какой результат будет выведен после выполнения следующей программы
func readFiles(ch <-chan string) error{
for path :range ch{
file, err := os.Open(path)
if err != nil {
return err
}
default file.Close()
}
return nil
}
Ответ
Фрагмент не компилируется: нужны for path := range ch и defer, а не default. После такого исправления останется проблема отложенного закрытия всех файлов.
defer внутри цикла выполняется при выходе из readFiles, а не в конце итерации, поэтому множество файлов может оставаться открытым одновременно. Вынесите обработку одного файла в отдельную функцию с defer Close либо закрывайте файл явно после каждой обработки, учитывая ошибки.
Сама readFiles ничего не печатает: она возвращает ошибку открытия или nil после закрытия входного канала. Если отправитель не закроет ch, цикл продолжит ждать. Чтение содержимого в приведённом примере вообще отсутствует, несмотря на название функции.