Я реализую код, в котором мне нужно выполнять несколько действий через фиксированные интервалы.
Мало кто из них связан с извлечением данных из базы данных MySQL.
Для планирования этих действий с фиксированным интервалом я использую gocron.Он работает довольно хорошо.
Для базы данных на данный момент я создаю экземпляр в начале основной программы и передаю его подпрограммам.Я использую https://github.com/jmoiron/sqlx для работы с БД.
Поток кода:
i- инициализация ресурсов.Например, db = sql.Open; поместить БД в общую структуру для передачи всем подпрограммам
ii-scheduleActions с использованием gocron (передавать ресурсы по мере необходимости)
iii- действия - это специальные подпрограммы, которые выполняютЗадача по мере необходимости с использованием данного ресурса (например, для БД)
Я получил несколько случаев, когда служба mysql должна быть перезапущена.
Затем, как и ожидалось, я получаю сообщение об ошибке с указанием неверного соединения.что-то вроде
[mysql] packets.go:33: unexpected EOF
[mysql] packets.go:130: write tcp 127.0.0.1:36191->127.0.0.1:3306: write: broken pipe
[mysql] connection.go:312: invalid connection
Чтобы обойти это, я сделал реализацию для получения соединения с БД в подпрограмме и закрытия с помощью defer db.close ().При этом я получаю ошибку, связанную с слишком большим количеством открытых соединений.Я проверил правильность закрытия строк, а также использование сканирования.И посмотрите, как выполняются рекомендации.
Я хотел бы понять, как поступить с открытой и закрытой БД в моем случае.