Maison >développement back-end >Golang >Comment gérer efficacement les données JSONB []string dans GORM sans postgres.Jsonb ?

Comment gérer efficacement les données JSONB []string dans GORM sans postgres.Jsonb ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-26 08:55:10853parcourir

How to Efficiently Manage JSONB []string Data in GORM without postgres.Jsonb?

Manipulation de JSONB dans Gorm avec une []string

Pour stocker une liste de chaînes en tant qu'objet JSONB dans Postgres à l'aide de GORM, une approche courante consiste à utiliser le type personnalisé de GORM , postgres.Jsonb. Cependant, pour éviter cette dépendance, voici une solution alternative :

Utiliser pgtype.JSONB

Au lieu de vous fier au type spécifique de GORM, envisagez d'implémenter pgtype.JSONB à partir du package pgx, que GORM utilise comme son conducteur. Voici comment l'incorporer dans votre modèle :

import (
    "github.com/jackc/pgx"
    "github.com/jackc/pgx/pgtype"
)

type User struct {
    gorm.Model
    Data pgtype.JSONB `gorm:"type:jsonb;default:'[]';not null"`
}

Travailler avec pgtype.JSONB

Récupérer la liste réelle des chaînes de la base de données :

u := User{}
db.Find(&u)

var data []string
err := u.Data.AssignTo(&data)
if err != nil {
    // Handle error
}

Mise à jour la liste des chaînes dans la base de données :

u := User{}

err := u.Data.Set([]string{"abc", "def"})
if err != nil {
    // Handle error
}

db.Updates(&u)

En tirant parti pgtype.JSONB, vous pouvez manipuler les données JSONB dans vos modèles Go sans utiliser le type postgres.Jsonb de GORM, offrant ainsi une approche plus directe et flexible du travail avec JSONB dans Postgres.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn