Я бы сделал что-то вроде этого.
- Найти первую дату понедельника из диапазона дат (см., Например, Как получить первый понедельник данного месяца в Go?
- Понедельники случаются каждую неделю, поэтому вы можете легко найти оставшиеся даты, добавив 7 дней до даты окончания
- Сохранение всех найденных вами дат понедельника с указанием времени начала и окончания
Я бы не стал беспокоиться о часах и минутах, так как вы легко можете получить их из отметок времени в Go. Вот упрощенная структура БД, которую я бы сделал
Fields for Schedule //Schedule is a collection name
Id (int)
Day (string)
Date (timestamp) // the actual date
Start (timestamp)
End (timestamp)
Вам не нужно больше полей. Вы можете получить день недели (день (строка) в вашей структуре, например, понедельник) из поля «Дата», но я считаю, что если вы хотите запросить коллекцию по разным дням, это может ускорить процесс, но будьте осторожны, если вам нужно настроить для часовых поясов. Если вы работаете с более чем одним, то сохраняйте все в UTC, и у вас может быть дополнительный поданный часовой пояс, потому что датой может быть понедельник для одной зоны и воскресенье для другой.
Итак, Расписание будет содержать рабочие дни, а также время начала и окончания каждого из них. Я не уверен, что если вам нужно сохранить начальные диапазоны дат, коллекция Schedule также будет содержать этот диапазон, от первой записи до последней. По моему мнению, сначала я бы заполнил коллекцию заданным диапазоном дат, а затем я могу изменить ее, добавив новые дни или удалив их.
Когда вы запрашиваете эту коллекцию с некоторым диапазоном начальной и конечной дат для поля Дата, если ваш первый результат приходит не позднее, чем через 7 дней с начала, это означает, что вы пропустили 1 или более записей с начала. Если последний результат приходит старше 7 дней после окончания диапазона, это означает, что вы пропустите некоторые записи до конца диапазона.
Нет ничего конкретного для Go, на мой взгляд, Go хорошо работает с датами, и вам не нужны никакие специальные структуры дат в вашей БД.