Heim  >  Artikel  >  Backend-Entwicklung  >  Wie benutzerdefinierte Satzdatentypen in GORM mit Golang beibehalten?

Wie benutzerdefinierte Satzdatentypen in GORM mit Golang beibehalten?

Susan Sarandon
Susan SarandonOriginal
2024-11-24 00:53:09170Durchsuche

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

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn