Heim >Backend-Entwicklung >Golang >Wie iteriere ich sicher über ein Map[string]*Book nach der Konvertierung von der Schnittstelle{}?

Wie iteriere ich sicher über ein Map[string]*Book nach der Konvertierung von der Schnittstelle{}?

Susan Sarandon
Susan SarandonOriginal
2024-12-01 11:53:11580Durchsuche

How to Safely Iterate Over a map[string]*Book After Converting from interface{}?

Schnittstelle{} mit Iteration in eine Karte konvertieren

In Ihrem Code ist beim Versuch, die Schnittstelle{} in eine Karte zu konvertieren, ein Fehler aufgetreten . Um dieses Problem zu beheben und die Iteration über Kartenelemente zu ermöglichen, führen Sie die folgenden Schritte aus:

Behauptungen verwenden:

Ersetzen Sie den reflexionsbasierten Ansatz durch direkte Typzusicherungen, wie in gezeigt der folgende Code:

func process(in interface{}, isSlice bool, isMap bool) {
    if isMap {
        v := in.(map[string]*Book)
        fmt.Printf("Type: %v\n", v)
        for _, s := range v {
            fmt.Printf("Value: %v\n", s)
        }
    }
}

Diese Behauptung weist den Wert „interface{}“ einer Variablen vom Typ „map[string]*Book“ zu, wenn die Bedingung erfüllt ist traf. Dieser Ansatz ist effizienter und erfordert keine Reflexion.

Alternativ können Sie Switch-Anweisungen verwenden, um verschiedene Arten von Eingaben zu verarbeiten, ohne Reflexion zu verwenden.

Benutzerdefinierte Zuordnungsschlüssel mit Reflexion verwenden ( Optional):

Wenn Sie dennoch Reflection verwenden müssen, können Sie Kartenschlüssel mithilfe von Value.MapKeys abrufen, anstatt direkt darüber zu iterieren Wert. Einzelheiten zu diesem Ansatz finden Sie in der in der bereitgestellten Lösung erwähnten Antwort zum Stapelüberlauf.

Das obige ist der detaillierte Inhalt vonWie iteriere ich sicher über ein Map[string]*Book nach der Konvertierung von der Schnittstelle{}?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn