Patrón repositorio y pooling

*sql.DB es un pool, no una conexión

Una idea le cambia la forma a cómo usas database/sql: un sql.DB no es una sola conexión — es un pool de conexiones que Go administra por ti. Es seguro compartirlo entre goroutines, así que lo abres una vez al arrancar y le entregas el mismo sql.DB a todo lo que toque la base de datos.

No abres un *sql.DB nuevo por petición. Cada Query/Exec toma prestada una conexión del pool, la usa, y la devuelve. Eso es lo que le permite a un solo servidor Go manejar miles de peticiones concurrentes contra un puñado de conexiones reales a la base de datos.