Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

329
Vistas
¿Cómo puedo insertar un mapa de golang en PostgreSQL?

Tengo un objeto json enviado desde una aplicación móvil, se ve así:

 { "product_id": "0123456789", "name": "PRODUCT_NAME", "manufacturer": "PRODUCT_MANUFACTURER", "image_url": "IMAGE_URL", "additional_info": "", "store_id": "STORE_ID", "store_name": "STORE_NAME", "owner_id": "OWNER_ID", "quantities": { "1000": 10.0, "1500": 12.0, } }

El valor clave en quantities es, por ejemplo, pueden ser gramos, y el valor es a representa un precio. Entonces, por ejemplo, 1000 gramos de arroz costarán 10 $ y 1500 gramos de arroz costarán 12,0 $ (como venta o algo así)

Tengo un objeto de modelo en mi código Go , que tiene las quantities archivadas como map[int]float32 . Estoy tratando de encontrar una forma de insertar este mapa en una base de datos PostgreSQL que tengo, pero no sé cómo.

Este es mi modelo Go :

 type Product struct { ID string UUID string Name string Manufacturer string ImageURL string AdditionalInfo string StoreID string StoreName string OwnerID string Quantities map[int]float32 }

Leí sobre JSONB , pero ¿no devolverá un json cuando recupere los datos? Lo necesito para devolver un map[int]float32 y no json .

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Debe implementar la interfaz driver.Valuer y sql.Scanner para guardar como JSONB

La interfaz driver.Valuer , de modo que ordena el objeto en un segmento de bytes JSON que la base de datos puede entender.

La interfaz sql.Scanner , de modo que separa un segmento de bytes JSON de la base de datos en los campos de estructura.

Y para json Marshal necesitas convertir map[int]float32 en map[string]float32

 type cusjsonb map[int]float32 // Returns the JSON-encoded representation func (a cusjsonb) Value() (driver.Value, error) { // Convert to map[string]float32 from map[int]float32 x := make(map[string]float32) for k, v := range a { x[strconv.FormatInt(int64(k), 10)] = v } // Marshal into json return json.Marshal(x) } // Decodes a JSON-encoded value func (a *cusjsonb) Scan(value interface{}) error { b, ok := value.([]byte) if !ok { return errors.New("type assertion to []byte failed") } // Unmarshal from json to map[string]float32 x := make(map[string]float32) if err := json.Unmarshal(b, &x); err != nil { return err } // Convert to map[int]float32 from map[string]float32 *a = make(cusjsonb, len(x)) for k, v := range x { if ki, err := strconv.ParseInt(k, 10, 32); err != nil { return err } else { (*a)[int(ki)] = v } } return nil }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda