Какой вывод появится в консоли при запуске программы №79

Фрагмент не компилируется: нужны for path := range ch и defer, а не default. После такого исправления останется проблема отложенного закрытия всех файлов.

Короткий ответ

Что ответить на собеседовании

Фрагмент не компилируется: нужны 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, цикл продолжит ждать. Чтение содержимого в приведённом примере вообще отсутствует, несмотря на название функции.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее