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 :
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!