


Comment gérer efficacement les données JSONB, en particulier les tranches de chaînes, avec Gorm et PostgreSQL ?
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

GO Language Pack Import: Quelle est la différence entre le soulignement et sans soulignement?

Comment mettre en œuvre le transfert d'informations à court terme entre les pages du cadre Beego?

Comment convertir la liste des résultats de la requête MySQL en une tranche de structure personnalisée dans le langage Go?

Comment puis-je définir des contraintes de type personnalisé pour les génériques en Go?

Comment écrire des objets et des talons simulés pour les tests en Go?

Comment écrire des fichiers dans GO Language de manière pratique?

Comment rédigez-vous des tests unitaires en Go?

Comment puis-je utiliser des outils de traçage pour comprendre le flux d'exécution de mes applications GO?
