runtime.KeepAlive(x) гарантирует, что x не будет собран GC до этой точки. Зачем: если передаёшь указатель в C через CGo, GC может собрать объект пока C код ещё работает с ним. KeepAlive после CGo вызова говорит GC "не трогай до сюда". Пример: p := &big; C.process(unsafe.Pointer(p)); runtime.KeepAlive(p). Без KeepAlive GC может собрать p во время C.process — use-after-free. Нужен редко, только с unsafe/CGo. В обычном Go коде GC сам отслеживает.