Bei dem Versuch, ein benutzerfreundliches Vorlagensystem zu erstellen, stellt sich die Frage: Wie kann der Variablenname so erhalten werden, wie er in erscheint den Quellcode mithilfe von Reflektion?
Das Ziel besteht darin, ein Segment von Variablen (Strings) zu erstellen und es zu durchlaufen und dabei das Markup zu ersetzen {{}} Platzhalter mit tatsächlichen Variablenwerten. Wenn der Variablenname beispielsweise onevar lautet, sollte das System die Vorlage nach {{onevar}} durchsuchen und sie durch den Wert der Variablen ersetzen.
Bei dieser Aufgabe geht es darum, die Natur der Reflexion beim Umgang mit Variablen zu verstehen. Im bereitgestellten Codeausschnitt:
onevar := "something" other := "something else" var msg string sa := []string{onevar, other} for _, v := range sa { vName := reflect.TypeOf(v).Name() vName = fmt.Sprintf("{{%s}}", vName) msg = strings.Replace(msg, vName, v, -1) }
Der Code versucht, den Variablennamen mithilfe von Reflektion abzurufen:
vName := reflect.TypeOf(v).Name()
Dieser Ansatz ist jedoch erfolglos, da ein Slice Werte und keine Variablen enthält . Daher erweist es sich als unmöglich, den Variablennamen aus einem Slice zu erhalten.
Lösung:
Um dieses Problem zu beheben, sollten Sie die Verwendung einer Karte anstelle eines Slice in Betracht ziehen, da Karten Schlüssel (Variablennamen) verknüpfen ) mit Werten:
vars := map[string]string{ "onevar": "something", "other": "something else", } var msg string for name, value := range vars { vName := fmt.Sprintf("{{%s}}", name) msg = strings.Replace(msg, vName, value, -1) }
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von Reflection für die Vorlagenerstellung Variablennamen aus dem Quellcode abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!