Strukturkonvertierung in Go
Betrachten Sie die folgenden zwei Strukturen:
type A struct { a int b string } type B struct { A c string }
Angenommen, Sie haben eine Variable vom Typ A und möchten sie in Typ B konvertieren. Ist dies in Go möglich oder müssen Sie Felder manuell kopieren oder eine explizite Konvertierungsmethode erstellen?
Methode 1: Zuweisung eingebetteter Strukturen
Wie Sie in Ihrer Frage erwähnt haben, kann die Einbettung für diesen Zweck verwendet werden. Durch die Einbettung von A in B können Sie eine Variable vom Typ A in den Typ B konvertieren, indem Sie sie einfach dem eingebetteten Feld zuweisen. Zum Beispiel:
func main() { structA := A{a: 42, b: "foo"} structB := B{A: structA} // Embed structA into structB }
Dieser Ansatz erstellt eine neue Instanz von B, die die Daten von A in ihrem eingebetteten Feld enthält.
Methode 2: Manuelles Feldkopieren
Alternativ können Sie die Felder manuell wie folgt von A nach B kopieren:
func main() { structA := A{a: 42, b: "foo"} structB := B{ A: structA, // Copy fields from structA c: "bar", } }
Diese Methode beinhaltet das Erstellen einer neuen Instanz von B und das manuelle Zuweisen der Felder von A.
Methode 3: Explizite Konvertierungsmethode
Eine weitere Option besteht darin, eine explizite Konvertierungsmethode zu erstellen, die A in B konvertiert. Dies kann nützlich sein, wenn Sie über eine komplexe Konvertierungslogik verfügen. Dieser Ansatz ist in diesem Fall jedoch nicht erforderlich, da die oben genannten Methoden eine einfache Möglichkeit bieten, die gewünschte Konvertierung zu erreichen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3