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>
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!