Persistenter benutzerdefinierter Set-Datentyp mit GORM Golang
Wenn Sie einen benutzerdefinierten Set-Datentyp verwenden, um Eins-zu-viele-Beziehungen in GORM zu definieren, Möglicherweise tritt ein Fehler auf, da es sich um einen ungültigen SQL-Typ handelt. Um dies zu umgehen, müssen Sie die Scanner- und Driver Valuer-Schnittstellen für Ihren benutzerdefinierten Typ implementieren. Dadurch kann der Datenbanktreiber verstehen, wie die Daten in der Datenbank gespeichert und abgerufen werden.
Scanner-Schnittstelle
Die Scanner-Schnittstelle verfügt über die folgende Methode:
func (data *CustomType) Scan(value interface{}) error
Diese Methode wird verwendet, um den Wert aus der Datenbank in Ihren benutzerdefinierten Typ zu scannen. Sie sollten diese Methode implementieren, um den Datenbankwert in Ihren benutzerdefinierten Typ zu konvertieren.
Driver Valuer-Schnittstelle
Die Driver Valuer-Schnittstelle verfügt über die folgende Methode:
func (data *CustomType) Value() (driver.Value, error)
Diese Methode wird verwendet, um Ihren benutzerdefinierten Typ in einen Datenbankwert umzuwandeln. Sie sollten diese Methode implementieren, um Ihren benutzerdefinierten Typ in ein Format zu konvertieren, das die Datenbank verstehen kann.
Beispiel
Betrachten wir einen benutzerdefinierten Typ UserAccess, bei dem es sich um eine Karte handelt[ interface{}]struct{}.
type UserAccess map[interface{}]struct{} func (data *UserAccess) Value() (driver.Value, error) { return data.ConvertJSONToString(), nil } func (data *UserAccess) Scan(value interface{}) error { *data = data.ConvertStringToJson(valueString) }
In diesem Beispiel sind ConvertStringToJson und ConvertJSONToString Hilfsfunktionen, die Konvertieren Sie zwischen UserAccess und einem datenbankkompatiblen Format wie einem JSON-String.
Durch die Implementierung dieser Schnittstellen teilen Sie dem Datenbanktreiber mit, wie er mit Ihrem benutzerdefinierten Datentyp umgehen soll, sodass Sie ihn in Ihrer Datenbank beibehalten können.
Das obige ist der detaillierte Inhalt vonWie benutzerdefinierte Satzdatentypen in GORM mit Golang beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!