sql.DB — долгоживущий конкурентно используемый пул с внутренним состоянием и синхронизацией. Копировать его по значению нельзя; передавайте *sql.DB.
В чём проблема копирования sql.DB по значению, а не по указателю?
sql.DB — долгоживущий конкурентно используемый пул с внутренним состоянием и синхронизацией. Копировать его по значению нельзя; передавайте *sql.DB.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
sql.DB — долгоживущий конкурентно используемый пул с внутренним состоянием и синхронизацией. Копировать его по значению нельзя; передавайте *sql.DB.
Конструктор sql.Open уже возвращает указатель, предназначенный для совместного использования. Копия структуры дублирует служебные поля и locks, но не создаёт корректный независимый пул. Храните *sql.DB в репозиториях, настройте лимиты и закрывайте его на уровне жизненного цикла приложения. Для транзакции используйте отдельный *sql.Tx, а не копию DB.