Maison >développement back-end >Golang >Comment conserver les types de données personnalisés avec GORM dans Golang ?

Comment conserver les types de données personnalisés avec GORM dans Golang ?

DDD
DDDoriginal
2024-11-19 09:18:02391parcourir

How to Persist Custom Set Data Types with GORM in Golang?

Persistance du type de données d'ensemble personnalisé à l'aide de GORM Golang

L'exemple de code fourni illustre le défi de la persistance d'un type de données d'ensemble personnalisé à l'aide de la bibliothèque GORM à Golang. Le type personnalisé est thread-unsafe et représente un ensemble de chaînes. Lorsque vous tentez de conserver une structure contenant ce type Set dans MySQL à l'aide de GORM, une erreur apparaît indiquant que le type Set n'est pas valide pour MySQL.

Pour résoudre ce problème, il est nécessaire d'implémenter certaines méthodes dans le fichier personnalisé. Définissez le type pour activer l’interaction avec la base de données. Ces méthodes incluent :

  • Value() : Convertit le type Set en une valeur compatible avec la base de données, telle qu'une chaîne codée en JSON.
  • Scan() : Remplit le type Set à partir d'une valeur récupérée dans la base de données.

Par en implémentant ces méthodes, la bibliothèque GORM peut gérer efficacement le type Set personnalisé pendant la persistance des données. Voici un exemple de la façon dont ces méthodes peuvent être implémentées pour le threadUnsafeSet fourni :

type threadUnsafeSet map[interface{}]struct{}

func (set *threadUnsafeSet) Value() (driver.Value, error) {
    return json.Marshal(set), nil
}

func (set *threadUnsafeSet) Scan(value interface{}) error {
    switch value := value.(type) {
    case []byte:
        return json.Unmarshal(value, set)
    }
    return errors.New("unrecognized value type")
}

Notez que la méthode Value() convertit le threadUnsafeSet en une chaîne codée en JSON, tandis que la méthode Scan() désorganise le JSON. chaîne dans le threadUnsafeSet.

Avec ces méthodes en place, le type de données Set personnalisé peut être utilisé efficacement avec GORM pour la persistance des données. Il est important d'implémenter les méthodes Value() et Scan() en fonction des exigences spécifiques de la base de données utilisée.

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