Рантайм и инструменты Go

О теме

GC, escape analysis, pprof, ошибки, тесты.

Лекции

Рантайм и инструменты Go
Тесты, бенчмарки и httptest

Тест фиксирует контракт: таблица случаев, при необходимости t.Parallel и httptest без сети. Бенчмарк с ReportAllocs измеряет аллокации. Покрытие без граничных случаев само по себе ничего не доказывает.

Рантайм и инструменты Go
Ошибки: wrapping, sentinel, panic

Ошибка в Go — значение, которое возвращают и оборачивают. Sentinel проверяют через errors.Is, типы — через As. panic оставляют багам, не веткам вроде невалидного ввода.

Рантайм и инструменты Go
pprof: CPU, heap, goroutine

pprof снимает профили CPU, кучи, блокировок и горутин. Разговор про «медленно» без цифр и без профиля обычно ничем не кончается.

Рантайм и инструменты Go
Сборщик мусора и GOGC

Сборщик в Go помечает живые объекты параллельно с программой. Полной остановки мира на всю кучу нет, но короткие паузы есть. GOGC задаёт, насколько куча может вырасти относительно живых данных между циклами.

Рантайм и инструменты Go
Escape analysis, стек и куча

Локальная переменная живёт на стеке горутины, пока компилятор не решит, что она «убегает». Тогда объект на куче, и его жизнь оплачивает сборщик мусора.

Рантайм и инструменты Go
defer: порядок и аргументы

defer ставит вызов в стек и выполняет его при выходе из функции, с конца. Аргументы считаются сразу, в момент defer, а не в момент выхода.