In Golang kann es vorkommen, dass Sie neue Instanzen von Typen basierend auf ihren als Strings gespeicherten Namen erstellen müssen . Während dies früher in älteren Versionen von Go möglich war, ist es nicht mehr einfach.
Go ist eine statisch typisierte Sprache, was bedeutet, dass der Compiler Datentypen überprüft und erzwingt Kompilierzeit. Dies gewährleistet die Typsicherheit, bedeutet aber auch, dass das Erstellen neuer Instanzen aus Zeichenfolgentypnamen nicht direkt unterstützt wird.
Um dies zu erreichen, können Sie die Verwendung von Reflection in Betracht ziehen, die eine Möglichkeit bietet um Objekte zur Laufzeit zu untersuchen und zu manipulieren. Reflexionen können jedoch komplex sein und zu Leistungseinbußen führen.
Ein Ansatz zur Verwendung von Reflexionen besteht darin, eine globale Map[string]reflect.Type zu verwalten. Diese Map kann in der init()-Funktion relevanter Pakete initialisiert werden, um sicherzustellen, dass der Compiler die erforderlichen Typen in die ausführbare Datei einbezieht.
Sie können diese Map dann verwenden, um den Reflect.Type des gewünschten Typs zu suchen und erstellen Sie eine neue Instanz mit „reflect.New“. Um das Objekt in eine Schnittstelle zu extrahieren, verwenden Sie „reflect.New(yourtype).Elem().Interface()“.
Alternativ sollten Sie eine bessere Programmstrukturierung in Betracht ziehen, die die Notwendigkeit vermeidet Reflexionen. Beispielsweise kann die Verwendung von Factory-Methoden oder die Pflege einer Map[string]func()-Schnittstelle{} mit Erstellungsfunktionen für verschiedene Typen einfachere und effizientere Lösungen bieten.
Das obige ist der detaillierte Inhalt vonWie kann ich Go-Typen aus Strings instanziieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!