GC, escape analysis, pprof, ошибки, тесты.
Лекции
Тесты, бенчмарки и httptest
Тест фиксирует контракт: таблица случаев, при необходимости t.Parallel и httptest без сети. Бенчмарк с ReportAllocs измеряет аллокации. Покрытие без граничных случаев само по себе ничего не доказывает.
Ошибки: wrapping, sentinel, panic
Ошибка в Go — значение, которое возвращают и оборачивают. Sentinel проверяют через errors.Is, типы — через As. panic оставляют багам, не веткам вроде невалидного ввода.
pprof: CPU, heap, goroutine
pprof снимает профили CPU, кучи, блокировок и горутин. Разговор про «медленно» без цифр и без профиля обычно ничем не кончается.
Сборщик мусора и GOGC
Сборщик в Go помечает живые объекты параллельно с программой. Полной остановки мира на всю кучу нет, но короткие паузы есть. GOGC задаёт, насколько куча может вырасти относительно живых данных между циклами.
Escape analysis, стек и куча
Локальная переменная живёт на стеке горутины, пока компилятор не решит, что она «убегает». Тогда объект на куче, и его жизнь оплачивает сборщик мусора.
defer: порядок и аргументы
defer ставит вызов в стек и выполняет его при выходе из функции, с конца. Аргументы считаются сразу, в момент defer, а не в момент выхода.