Golang-Typzusicherung: Behandlung von Datenbanktypkonvertierungen
In Go ermöglichen uns Typzusicherungen, einen Wert basierend auf seinem Wert in einen anderen Typ umzuwandeln tatsächlicher Typ. Dies ist nützlich, wenn Sie mit dynamischen Typen arbeiten oder benutzerdefinierte Schnittstellen implementieren.
Stellen Sie sich ein Szenario vor, in dem wir einen benutzerdefinierten Typ namens Role basierend auf einer Zeichenfolge erstellen und ihn mit einem Datenbanktreiber verwenden möchten. Dazu müssen wir die Schnittstellen Valuer und Scanner implementieren.
Bei der Implementierung dieser Schnittstellen kann es jedoch zu folgendem Fehler kommen:
cannot convert value.(string) (type string) to type *Role
Lösung für die Scan-Funktion:
Die Scan-Funktion wird beim Abrufen von Daten aus einer Datenbank verwendet. Das Problem entsteht, weil wir versuchen, den Wert vom Typ string direkt in einen *Role-Zeiger umzuwandeln. Stattdessen sollten wir den r-Zeiger dereferenzieren und ihm den Wert value zuweisen, etwa so:
func (r *Role) Scan(value interface{}) error { *r = Role(value.(string)) return nil }
Lösung für die Wertfunktion:
Die Wertfunktion ist Wird beim Einfügen oder Aktualisieren von Daten in eine Datenbank verwendet. Die falsche Signatur wurde zuvor bereitgestellt. Die korrekte Signatur lautet:
func (r Role) Value() (driver.Value, error) { return string(r), nil }
Beachten Sie, dass diese Funktion keine NULL-Werte verarbeitet oder erzeugt.
Durch Befolgen dieser Korrekturen können wir die Typkonvertierung für unseren benutzerdefinierten Rollentyp erfolgreich implementieren, wenn Arbeiten mit Datenbanktreibern.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Typkonvertierungen um, wenn ich mit Datenbanken in Go arbeite?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!