Ответ
Паттерн 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 с осторожностью.