Heim  >  Artikel  >  Backend-Entwicklung  >  Wie füge ich effizient mehrere Schlüssel-Wert-Paare zu einem Go-Kontext hinzu: Einzel- oder Mehrfachaufrufe?

Wie füge ich effizient mehrere Schlüssel-Wert-Paare zu einem Go-Kontext hinzu: Einzel- oder Mehrfachaufrufe?

Susan Sarandon
Susan SarandonOriginal
2024-11-16 01:12:03528Durchsuche

How to Add Multiple Key-Value Pairs to a Go Context Efficiently: Single vs. Multiple Calls?

Schlüssel-Wert-Paar-Additionen in Context.WithValue: Einzelne vs. mehrfache Additionen

Im Kontextpaket von Go ermöglicht context.WithValue die Hinzufügen anforderungsspezifischer Daten zum Anforderungsverarbeitungsstapel. Beim Umgang mit mehreren Schlüssel-Wert-Paaren ist der optimale Ansatz jedoch nicht sofort ersichtlich.

Mehrere Aufrufe von WithValue()

Eine Möglichkeit besteht darin, WithValue( aufzurufen ) mehrmals, wobei jedes Schlüssel-Wert-Paar schrittweise zum Kontext hinzugefügt wird. Obwohl diese Methode einfach ist, kann sie für eine große Anzahl von Paaren umständlich werden.

Verwendung einer Struktur

Eine Alternative besteht darin, eine Struktur zu verwenden, die alles kapselt Schlüssel-Wert-Paare, wodurch die WithValue()-Aufrufe auf eins reduziert werden. Dieser Ansatz kann jedoch zu unnötigem Kopieren von Daten führen.

Kartenbasierte Lösung

Um die Leistung für schnelle Schlüsselwertsuchen zu verbessern, sollten Sie die Verwendung und das Hinzufügen einer Karte in Betracht ziehen als einzelner Wert für den Kontext. Dies ermöglicht einen effizienten O(1)-Zugriff auf einzelne Werte.

Hybridansatz

Eine Hybridlösung vereint die Vorteile beider Ansätze. Erstellen Sie eine Wrapper-Struktur, die eine nicht exportierte Karte verbirgt und eine Getter-Methode bereitstellt. Indem nur die Wrapper-Struktur zum Kontext hinzugefügt wird, bleibt der gleichzeitige Zugriff erhalten, das Kopieren von Daten wird minimiert und schnelle Schlüsselwertsuchen werden beibehalten.

Beispiel: Hybridlösung

type Values struct {
    m map[string]string
}

func (v Values) Get(key string) string {
    return v.m[key]
}
v := Values{map[string]string{
    "1": "one",
    "2": "two",
}}

c := context.Background()
c2 := context.WithValue(c, "myvalues", v)

fmt.Println(c2.Value("myvalues").(Values).Get("2"))

Fazit

Die optimale Methode zum Hinzufügen mehrerer Schlüssel-Wert-Paare zu einem Kontext hängt von den spezifischen Anforderungen der Anwendung ab. Für Situationen, in denen die Leistung von entscheidender Bedeutung ist und schnelle Schlüsselwertsuchen erforderlich sind, ist ein kartenbasierter oder hybrider Ansatz am besten geeignet. Für weniger leistungsempfindliche Szenarien oder mit einer begrenzten Anzahl von Schlüssel-Wert-Paaren können mehrere Aufrufe von WithValue() oder die Verwendung einer Struktur ausreichen.

Das obige ist der detaillierte Inhalt vonWie füge ich effizient mehrere Schlüssel-Wert-Paare zu einem Go-Kontext hinzu: Einzel- oder Mehrfachaufrufe?. 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