TGViewer
Golang вопросы собеседований Golang вопросы собеседований @golang_interview · 15.1K subscribers
Post #1571 2.11K
🐹 Go: `defer f.Close()` может скрыть ошибку записи

При работе с bufio.Writer данные сначала попадают в буфер. Ошибка может возникнуть при Flush() или закрытии файла - уже после успешного Write().

Сохранить все ошибки можно через именованный результат и errors.Join:


func save(path string, data []byte) (err error) {
f, err := os.Create(path)
if err != nil {
return err
}

w := bufio.NewWriter(f)

defer func() {
flushErr := w.Flush()
closeErr := f.Close()
err = errors.Join(err, flushErr, closeErr)
}()

_, err = w.Write(data)
return err
}


Нужны пакеты bufio, errors и os.

Что здесь важно:

* сначала выполняется Flush(), затем Close()
* файл закрывается даже при ошибке сброса буфера
* именованный err позволяет изменить результат после return, пока выполняется defer
* errors.Join сохраняет все ошибки; errors.Is и errors.As умеют их проверять
* если ошибок нет, результат остаётся nil

Ловушка: defer errors.Join(err, f.Close()) закроет файл сразу - аргументы отложенного вызова вычисляются при регистрации defer.

Приём работает в актуальном Go и доступен с Go 1.20. Flush() передаёт данные нижележащему writer; для синхронизации файла с хранилищем нужен отдельный f.Sync().

errors.Join - https://pkg.go.dev/errors#Join
os.File - https://pkg.go.dev/os#File.Sync
pkg.go.dev errors package - errors - Go Packages Package errors implements functions to manipulate errors.
  • 🔥 7
  • ❤ 1
  • 👍 1
More from @golang_interview
  1. Sep 19, 2026🐹 golang-set - готовые множества для Go с поддержкой дженериков Библиотека для работы с к…
  2. Sep 15, 2026Apache Kafka курс 2026: бесплатный курс по Kafka с нуля до профи на русском Kafka обучение…
  3. Sep 13, 2026🔥 AI-кодинг в Go - не главная проблема. Проблема начинается, когда код никто нормально не…
  4. Sep 13, 2026🔥 Хочешь расти в IT быстрее остальных? Перестань учиться в одиночку Можно годами смотреть…
  5. Sep 11, 2026⚡️ DeepSeek открыла веса V4.1-Flash DeepSeek выложила свежайшую DeepSeek-V4.1-Flash, мульт…
  6. Sep 11, 2026Команды ждут тебя на треке программирование роботов на МТС True Tech Champ 2026 — всеросси…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →