Разбор паники: что читать в трассировке стека
Трассировка паники в Go содержит всё нужное, если знать, что читать. Первая строка — причина: nil pointer dereference, index out of range [5] with length 3, assignment to entry in nil map, close of closed channel — уже она обычно указывает на класс ошибки. Дальше идёт стек горутины, которая паниковала, снизу вверх по вызовам, где верхний кадр — место сбоя; в скобках у каждого кадра стоят аргументы в шестнадцатеричном виде, что иногда позволяет увидеть нулевой указатель. [recovered] в выводе означает, что паника была перехвачена и переброшена — типично для HTTP-сервера, который перехватывает панику обработчика. Строка goroutine 42 [running] даёт номер и состояние. По умолчанию печатается стек только паниковавшей горутины; GOTRACEBACK=all добавляет остальные, и это часто необходимо, потому что причина бывает в другой горутине. Важное свойство: паника в любой горутине роняет весь процесс, если её не перехватили в ней же.