Gestion des données JSONB dans Gorm
La gestion des données JSONB dans Postgres avec Gorm peut poser des défis, en particulier lorsque vous travaillez avec une tranche de chaînes. Voici un examen détaillé des options disponibles :
Utilisation de postgres.Jsonb :
Gorm fournit un type spécifique, postgres.Jsonb, conçu pour la manipulation JSONB. Bien que cette méthode offre une approche simple, elle n'est peut-être pas idéale pour les scénarios dans lesquels vous préférez éviter d'utiliser le type spécifique à Gorm.
Tranche de chaînes :
Lors de la définition d'une structure Go avec un tranche de chaînes et en essayant de la mapper en tant qu'objet JSONB, Gorm peut rencontrer des difficultés. Si vous choisissez cette approche, vous devrez spécifier explicitement les balises sql et json comme indiqué ci-dessous :
type User struct { gorm.Model Data []string `sql:"type:jsonb" json:"data"` }
Cependant, cette approche peut déclencher une panique lors de l'exécution d'AutoMigrate.
Imbriqué Struct :
Pour contourner le problème de panique, vous pouvez envelopper la tranche de chaînes dans un fichier imbriqué struct :
type User struct { gorm.Model Data struct { NestedData []string } `sql:"type:jsonb" json:"data"` }
Bien que cette technique évite le crash, elle risque de ne pas créer la colonne prévue dans Postgres.
Solution alternative avec pgtype.JSONB :
Une approche privilégiée implique d'utiliser le type pgtype.JSONB disponible dans pgx, le pilote sous-jacent de Gorm. Cette méthode élimine le besoin de code personnalisé et permet la manipulation de tout type JSONB au-delà des tranches de chaîne.
Voici un exemple d'utilisation de pgtype.JSONB :
type User struct { gorm.Model Data pgtype.JSONB `gorm:"type:jsonb;default:'[]';not null"` }
Pour récupérer des données de la base de données :
u := User{} db.Find(&u) var data []string _ = u.Data.AssignTo(&data)
Pour mettre à jour les données dans la base de données :
u := User{} _ = u.Data.Set([]string{"abc", "def"}) db.Updates(&u)
Par en tirant parti de cette approche, vous pouvez gérer efficacement les données JSONB dans Gorm sans utiliser le type postgres.Jsonb.
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!