In Go ist es nicht einfach, ein Objekt zu instanziieren, wenn nur der Typname als Zeichenfolge verfügbar ist. Dies liegt daran, dass Go statisch typisiert ist und nicht verwendeten Code während der Verknüpfung entfernt.
Reflection verwenden
Trotz der Einschränkungen kann Reflection zum dynamischen Erstellen von Instanzen eingesetzt werden. Hier ist der Prozess:
Codebeispiel:
import ( "fmt" "reflect" ) // Global map for type lookup var typeMap = make(map[string]reflect.Type) func init() { // Initialize typeMap by adding types to it typeMap["MyStruct"] = reflect.TypeOf(MyStruct{}) } func main() { typeName := "MyStruct" t := typeMap[typeName] instance := reflect.New(t).Elem().Interface() fmt.Println(instance) }
Alternative Ansätze
Neben der Reflexion sollten Sie Folgendes berücksichtigen Alternativen:
Hinweis: Diese Ansätze vermeiden die Komplexität der Reflexion und verbessern möglicherweise die Fehlerbehandlung während der Kompilierung.
Das obige ist der detaillierte Inhalt vonWie kann ich Go-Instanzen nur mit ihren Typnamen als Strings erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!