creo esta clase debe actualizarse porque al final no se pued eseguir esta clase ya que ni el repo ni las mismas funciones están disponibles por lo que hay que estar revisando por otra lado, cosa que a mi parecer, no debería ser.
de primera asi lo resolvi
func Log(f HandlerFunc) HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
log.Printf("Petición a: %q, Método: %q", r.URL.Path, r.Method)
start := time.Now()
f(w, r)
end := time.Now()
duration := end.Sub(start)
fmt.Println("Duración: ", duration)
}
}
Agregó el código con Gorm al 18 de junio 2026.
package storage
/* Paquete storage exporta:
- NewPostgresDB() que genera conexión a BD con singleton y la verifica
- Pool() retorna la conexión para usarla
*/
import (
"fmt"
"log"
"sync"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
var (
db *gorm.DB
once sync.Once
)
func NewPostgresDB() {
once.Do(func() {
var err error
dsn := "aquí va la connStr que teníamos"
db, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatalf("can't open Database: %v", err)
}
// Verificar conexión real al servidor
sqlDB, err := db.DB()
if err != nil {
log.Fatalf("can't get underlying sql.DB: %v", err)
}
if err = sqlDB.Ping(); err != nil {
log.Fatalf("couldn't connect to Database: %v", err)
}
fmt.Println("Conectado a Postgres.")
})
}
// Pool: return a unique instance of DB.
func Pool() *gorm.DB {
return db
}
porque importan de jin<hu? si está el paquete gorm.io/gorm (según documentación) creo aquí ya me perdi y hay que buscar nuevamente por fuera la info o me equivoco?
sería bueno que actualicen esta clase porque no es lo que dice la documentación el día de hoy. ACtualmente veo que dic esto:
import (
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
dsn := "host=localhost user=gorm password=gorm dbname=gorm port=9920 sslmode=disable TimeZone=Asia/Shanghai"
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
Me surge una duda con lo de los errores, es correcto que salga con exit status 1? no debe ser 0? entendería que si bien mostramos el mensaje que definimos , sigue siendo un error no controlado si exit status es 1 no? gracias
para los que tengan problema con la impresión de los datos agregue este metodo a type Models []*Model para que muestre bien los datos
func (ms Models) String() string {
out := fmt.Sprintf("| %-5s | %-25s | %-30s | %-8s | %-20s | %-20s |\n",
"ID", "NAME", "OBSERVATIONS", "PRICE", "CREATED_AT", "UPDATED_AT",
)
out += fmt.Sprintf("%s\n", strings.Repeat("-", 127))
for _, m := range ms {
out += fmt.Sprintf("| %-5d | %-25s | %-30s | %-8d | %-20s | %-20s |\n",
m.ID,
m.Name,
m.Observations,
m.Price,
m.CreatedAt.Format("2006-01-02 15:04:05"),
m.UpdatedAt.Format("2006-01-02 15:04:05"),
)
}
return out
}
porqué se envía el created_at si al crear la BD le colocamos que default now()?
Hacer esto, sería similar a Herencia por lo que vero, y lo que veo es que , de alguna manera tendríamos que estarnos preocupando el manjeo de la jerarquí de datos no? me refiero por esta parte del constructor de empleado porque debemos saber el tipo de dato embebido. Entiendo que esto a lo que se referían de porque no la herencia no?
func NewEmployee(name string, age uint, salary float64) Employee { ... }
Una duda, hay alguna maera que se puedan crear todos los getters y setters de los campos en automático, similar como los decoradores de loombok en java ?