runtime.KeepAlive гарантирует достижимость объекта до указанной точки, чтобы финализатор не освободил связанный ресурс слишком рано. Это не блокировка и не фиксация адреса.
Что делает runtime.KeepAlive и в каких случаях она необходима?
runtime.KeepAlive гарантирует достижимость объекта до указанной точки, чтобы финализатор не освободил связанный ресурс слишком рано. Это не блокировка и не фиксация адреса.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
runtime.KeepAlive гарантирует достижимость объекта до указанной точки, чтобы финализатор не освободил связанный ресурс слишком рано. Это не блокировка и не фиксация адреса.
Типичный случай — Go-объект владеет файловым дескриптором, а в системный вызов передаётся только его числовое значение. KeepAlive после последнего использования ресурса удерживает владельца до этой точки. Он не защищает от явного Close из другой горутины и не делает произвольные преобразования unsafe.Pointer/uintptr корректными. Используйте его только при понятном контракте времени жизни.
Источник: go.dev.