Wie kann ich generische Typen in der „Unmarshal'-Funktion von Go für typsicheres JSON-Parsing verwenden, ohne auf Typzusicherungen zurückgreifen zu müssen?

Mary-Kate Olsen
Freigeben: 2024-10-30 01:08:02
Original
506 Leute haben es durchsucht

How can I use generic types in Go's `Unmarshal` function for type-safe JSON parsing without resorting to type assertions?

Generika in Unmarshal, ein genauerer Blick

Generika in Go sind ein leistungsstarkes Tool zum Schreiben von wiederverwendbarerem und typsichererem Code. Wenn es jedoch um die Verwendung von Generika mit Unmarshal geht, müssen wir uns einiger Herausforderungen bewusst sein.

In dieser Frage-und-Antwort-Runde versucht der Benutzer, Generika zu verwenden, um eine typsicherere Methode zum Unmarshalieren zu schaffen JSON-Daten in eine Struktur. Das Problem, mit dem sie konfrontiert sind, besteht darin, dass sie keine Typeinschränkungen für die Funktion GetBody() verwenden können, was dazu führt, dass sie Typzusicherungen in ihrem Code verwenden müssen.

Der Grund dafür ist, dass Go dies tut Unterstützt keine Typzusicherungen für Strukturen, sondern nur für Schnittstellen. Das bedeutet, dass wir die GetBody()-Funktion nicht in einen bestimmten Typ umwandeln können, ohne zuvor den genauen Typ der Struktur zu kennen.

Eine mögliche Lösung für dieses Problem wäre die Verwendung einer Switch-Anweisung, um das ReportType-Feld von zu überprüfen die Struktur und wandeln Sie dann die Funktion GetBody() in den entsprechenden Typ um. Diese Lösung ist jedoch nicht sehr elegant und kann schwierig zu verwalten sein, da die Anzahl der verschiedenen Typen, die die Struktur enthalten kann, zunimmt.

Eine bessere Lösung für dieses Problem ist die Verwendung eines Typwechselausdrucks in der GetBody()-Funktion. Dadurch können wir die Funktion „GetBody()“ in den entsprechenden Typ umwandeln, ohne eine Switch-Anweisung verwenden zu müssen. Dies ist eine elegantere Lösung und auch wartbarer.

Um diese Lösung zu veranschaulichen, hier eine modifizierte Version der GetBody()-Funktion:

<code class="go">func (c *ReportContainerImpl[T]) GetBody() (T, error) {
    var body T
    var err error
    switch c.ReportType {
    case ReportTypeExportDataPointReport:
        err = json.Unmarshal(c.Body, &body)
    case ReportTypeImportDataPointReport:
        err = json.Unmarshal(c.Body, &body)
    case ReportTypeMissingDataPointReport:
        err = json.Unmarshal(c.Body, &body)
    case ReportTypeSensorThresoldReport:
        err = json.Unmarshal(c.Body, &body)
    }
    return body, err
}</code>
Nach dem Login kopieren

Mit dieser Änderung haben wir kann jetzt die Funktion GetBody() verwenden, um den Hauptteil der Struktur abzurufen, ohne eine Switch-Anweisung verwenden zu müssen. Dadurch wird der Code eleganter und einfacher zu warten.

Das obige ist der detaillierte Inhalt vonWie kann ich generische Typen in der „Unmarshal'-Funktion von Go für typsicheres JSON-Parsing verwenden, ohne auf Typzusicherungen zurückgreifen zu müssen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!