Что такое паттерн RAF

«Что такое паттерн RAF» — вопрос из категории Архитектура, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Паттерн RAF (Read-After-Free) — это антипаттерн, возникающий при работе с памятью, когда программа обращается к данным после их освобождения. В Go такое поведение встречается реже благодаря сборщику мусора, но возможно при использовании unsafe или нативных библиотек.

Пример опасного кода:

import "unsafe"

func main() {
    data := []byte("test")
    ptr := unsafe.Pointer(&data[0])
    data = nil // данные могут быть собраны GC
    // Чтение после освобождения - UB!
    _ = *(*byte)(ptr)
}

Основные риски:

  • Неопределённое поведение
  • Уязвимости безопасности
  • Падения программы

В Go следует избегать unsafe и явного управления памятью, полагаясь на GC. Для работы с внешними ресурсами (например, C-библиотеками) используйте cgo с осторожностью.