s60, https://go.dev/play/p/JQ_i_hj5iPZ
шэдоуинг — это когда во вложенном скоупе создаем переменную с таким же именем
такое может возникать при использовании частых имен типа i, err
Очень много кода приведено, причем без комментариев и огромными функциями. Советую побить логику на более понятные логические блоки и отдельно их покрыть тестами. Тогда ошибку будет выловить гораздо легче.
Марат Нагаев, значит скорее всего эта горутина и утекает. Нужно обращать внимание на первое число в начале стека, это количество горутин, которые остановились в этом месте. Обычно в месте учетки это число растет постепенно
Soft_touch_plastic, в глобальных пакетах можно оставить лог, например. Остальное бы вынес.
Потому что тестить с глобалами очень сложно и могут быть проблемы с побочными эффектами (когда одна функция что-то меняет в глобальной области, а другие от этого ловят баги, отлаживать такое в большом проекте— смерть)