Что такое Arena

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

Ответ

Arena — это экспериментальная фича в Go (начиная с версии 1.20), предназначенная для управления памятью вручную. Она позволяет выделять память в виде области (arena), из которой можно аллоцировать объекты, а затем освобождать всю область разом, избегая сборки мусора для отдельных объектов.

Пример:

import "arena"

type MyStruct struct {
    Data int
}

func main() {
    a := arena.NewArena()
    defer a.Free()

    obj := arena.New[MyStruct](a)
    obj.Data = 42
}

Нюансы:

  • Только для оптимизации в критичных к памяти сценариях
  • Объекты из arena нельзя использовать после вызова Free()
  • Не thread-safe
  • Экспериментальная фича (требует GOEXPERIMENT=arenas)