Heim  >  Artikel  >  Backend-Entwicklung  >  Warum schlägt die Typzusicherung fehl, wenn die Schnittstellen „Valuer“ und „Scanner“ in Go implementiert werden?

Warum schlägt die Typzusicherung fehl, wenn die Schnittstellen „Valuer“ und „Scanner“ in Go implementiert werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-06 20:00:04345Durchsuche

Why Does Type Assertion Fail When Implementing `Valuer` and `Scanner` Interfaces in Go?

Golang-Typzusicherungen verstehen

In Go kann man mithilfe von Typaliasen benutzerdefinierte Typen basierend auf vorhandenen Typen definieren. Im gegebenen Szenario ist der Role-Typ ein Alias ​​für den integrierten String-Typ. Bei der Implementierung der Valuer- und Scanner-Schnittstellen für diesen benutzerdefinierten Typ tritt jedoch ein Fehler auf.

Behebung des Fehlers

Die Fehlermeldung deutet darauf hin, dass ein Problem mit vorliegt die Typkonvertierung in der Scan-Methode. Insbesondere wird der Versuch beanstandet, den konvertierten Wert einem Zeiger auf eine Rolle zuzuweisen.

Die erste Funktion, Scan, ist dafür verantwortlich, einen Wert aus der Datenbank zu extrahieren und ihn in den entsprechenden Typ zu konvertieren. Das Problem liegt in der Zuweisungszeile:

r = (*Role)(value.(string))

Der Ausdruck value.(string) versucht, den Wertparameter in einen String umzuwandeln. Die Zuweisung versucht jedoch, diesen konvertierten Wert anschließend einem Zeiger auf eine Rolle zuzuweisen. Dies ist falsch, da das Ziel vom Typ *Role und nicht vom Typ Role sein sollte. Der korrigierte Code lautet:

func (r *Role) Scan(value interface{}) error {
    *r = Role(value.(string))
    return nil
}

Die zweite Funktion, Value, ist für die Konvertierung eines Werts in ein datenbankkompatibles Format verantwortlich. Der angegebene Code ist falsch, da er nicht der erwarteten Funktionssignatur für „driver.Valuer“ folgt. Der korrigierte Code lautet:

func (r Role) Value() (driver.Value, error) {
    return string(r), nil
}

Fazit

Durch Korrigieren der Typkonvertierung in der Scan-Methode und Anpassen der Funktionssignatur in der Value-Methode sollte der Code funktionieren wie beabsichtigt, sodass der benutzerdefinierte Rollentyp mit dem Datenbanktreiber interagieren kann.

Das obige ist der detaillierte Inhalt vonWarum schlägt die Typzusicherung fehl, wenn die Schnittstellen „Valuer“ und „Scanner“ in Go implementiert werden?. 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