Maison >développement back-end >Golang >Comment stocker un tableau d'entiers dans un modèle Gorm à l'aide de PostgreSQL ?
Ajout d'un tableau d'entiers comme type de données dans un modèle Gorm
Introduction :
Quand vous travaillez avec PostgreSQL utilisant Gorm, l'ajout d'un tableau d'entiers comme type de données dans un modèle peut présenter des défis. Cet article aborde un problème courant rencontré lors de la tentative d'une telle opération.
Problème :
Les modèles Gorm rencontrent souvent une erreur lorsqu'ils tentent d'enregistrer un tableau de nombres dans un seul champ PostgreSQL. L'erreur se lit généralement comme suit : "panique : type SQL (slice) invalide pour postgres."
Dépannage :
Le problème provient de l'utilisation de la tranche comme type de données. La solution consiste à utiliser des types personnalisés de la bibliothèque de pilotes PostgreSQL sous-jacente.
Solution :
Dans le modèle fourni :
<code class="go">type Game struct { gorm.Model GameCode string GameName string DeckType pq.Int64Array GameEndDate string }</code>
Remplacez DeckType []int64 par DeckType pq.Int64Array, où pq est importé en tant qu'import pq "github.com/lib/pq".
Balise GORM :
Pour mapper correctement le type personnalisé à la colonne de la base de données , ajoutez une balise gorm pour spécifier le type de colonne :
<code class="go">DeckType pq.Int64Array `gorm:"type:integer[]"`</code>
Cette balise indique que le champ DeckType doit être mappé à un tableau d'entiers PostgreSQL.
Exemple d'insertion :
Après avoir modifié le modèle et ajouté la balise GORM, vous pouvez insérer un tableau d'entiers dans la base de données :
<code class="go">dt := []int64{1, 2, 3} db.Create(&Game{GameCode: "xxx", GameName: "xxx", DeckType: pq.Int64Array(dt), GameEndDate: "xxx"})</code>
En utilisant le type personnalisé et la balise GORM, vous pouvez enregistrer avec succès un tableau de entiers dans un champ PostgreSQL.
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!