


Der effizienteste Weg, eindeutige Kartenschlüssel in Go zu erstellen
In der Go-Sprache war die effizienteste Möglichkeit zur Erstellung eindeutiger Zuordnungsschlüssel schon immer ein Anliegen für Entwickler. In Situationen, in denen Schlüssel eindeutig sein müssen, müssen wir eine effiziente und zuverlässige Methode finden. Der PHP-Editor Baicao stellt in diesem Artikel eine der effektivsten Methoden vor, mit denen Sie eindeutige Zuordnungsschlüssel in der Go-Sprache erstellen und so Ihren Code optimierter und effizienter gestalten können. Unabhängig davon, ob Sie große Datenmengen verarbeiten oder hochgradig gleichzeitige Anwendungen implementieren, können diese Methoden Ihnen dabei helfen, Leistung und Effizienz zu verbessern. Finden wir es gemeinsam heraus!
Frageninhalt
Ich habe einen map[any]SomeType
irgendwo in der Bibliothek. Ich möchte, dass Bibliotheksbenutzer Schlüssel für diese Karte erstellen können, damit es garantiert nicht zu Konflikten innerhalb einer einzelnen Anwendungsausführung kommt, und ich möchte, dass diese Schlüssel für die Kartensuche effizient sind.
Das erste, was mir in den Sinn kommt, ist die Verwendung der Speicheradresse eines eindeutigen leeren Objekts. Aber alles, was ich bisher versucht habe, ist fehlgeschlagen:
<code>package main import "fmt" var key1 = &struct{}{} var key2 = &struct{}{} var key3 = struct{}{} var key4 = struct{}{} var key5 = new(struct{}) var key6 = new(struct{}) func main() { fmt.Println("key1 == key2", key1 == key2) fmt.Println("key3 == key4", &key3 == &key4) fmt.Println("key5 == key6", key5 == key6) test(key1, key2, "func12") test(&key3, &key4, "func34") test(key5, key6, "func56") } func test(a, b any, msg string) { fmt.Println(msg, a == b) } </code>
key1 == key2 true key3 == key4 false key5 == key6 true func12 true func34 true func56 true
Das Ermitteln der Adresse einer leeren Strukturvariablen ist also fast machbar, bis Sie sie an eine Funktion übergeben. Dann verschwindet der Unterschied.
Ich möchte keine Schlüsselregistrierung einführen, da dies eine unnötige Komplikation darstellt. Ich möchte auch keine Zeichenfolgen verwenden, da verschiedene Verbraucher der Bibliothek Schlüssel aushandeln oder Namespaces verwenden müssten und die Notwendigkeit, Zeichenfolgen zu hashen und zu vergleichen, ebenfalls eine unnötige Komplikation darstellt.
Gibt es Methoden, an die ich noch nicht gedacht habe?
Problemumgehung
Die Standardbibliothek verwendet den context.Context
时使用了一个“技巧”:上下文能够在其中携带任意值,并且这些值使用 interface{}
进行键控(从一段时间以来 any
)1。然后,您自己的包可以为其将要使用的上下文键定义一个新的未导出类型,然后定义一组具有该类型的常量作为该包已知的上下文键。现在的技巧是,类型始终是 interface{}
-Teil eines beliebigen Werttyps, daher ist es nicht möglich, Schnittstellenwerte zu erstellen, die mit den Schlüsseln des Pakets in Konflikt stehen.
Im Grunde ist es so:
package mypkg type contextKey int const ( KeyFoo = contextKey(iota) KeyBar )
Jetzt, wenn Sie key interface{} = KeyFoo
时,几乎可以保证程序中任何其他代码段都不能具有与 key
相同的值,因为其中一部分将(指向的内部指针)未导出输入 contextKey
ausführen.
Vielleicht möchten Sie diesen klassischen Artikel lesen, um zu verstehen, wie es funktioniert (etwas eingerostet, aber immer noch zu 99 % korrekt)).
Für mich sieht das nach einem Weg in die Zukunft aus: Benutzer Ihres Pakets können ihre eigenen Schlüssel generieren und diese an Ihre Karte senden, die den Schlüsseltyp interface{}
或 any
haben sollte. Für die Übergabe dieser Schlüssel ist keine zentrale Registrierungsstelle erforderlich.
1 Weitere Informationen finden Sie unter context.Context.Value() und context.WithValue(). Letzteres bietet weitere Tipps zur Generierung des Schlüssels.
Das obige ist der detaillierte Inhalt vonDer effizienteste Weg, eindeutige Kartenschlüssel in Go zu erstellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen





Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Multithreading in der Sprache kann die Programmeffizienz erheblich verbessern. Es gibt vier Hauptmethoden, um Multithreading in C -Sprache zu implementieren: Erstellen Sie unabhängige Prozesse: Erstellen Sie mehrere unabhängig laufende Prozesse. Jeder Prozess hat seinen eigenen Speicherplatz. Pseudo-MultitHhreading: Erstellen Sie mehrere Ausführungsströme in einem Prozess, der denselben Speicherplatz freigibt und abwechselnd ausführt. Multi-Thread-Bibliothek: Verwenden Sie Multi-Thread-Bibliotheken wie PThreads, um Threads zu erstellen und zu verwalten, wodurch reichhaltige Funktionen der Thread-Betriebsfunktionen bereitgestellt werden. Coroutine: Eine leichte Multi-Thread-Implementierung, die Aufgaben in kleine Unteraufgaben unterteilt und sie wiederum ausführt.

Es gibt keine Funktion mit dem Namen "Sum" in der C -Sprachstandard -Bibliothek. "Summe" wird normalerweise von Programmierern definiert oder in bestimmten Bibliotheken bereitgestellt, und seine Funktionalität hängt von der spezifischen Implementierung ab. Gemeinsame Szenarien sind für Arrays summiert und können auch in anderen Datenstrukturen verwendet werden, z. B. in verknüpften Listen. Zusätzlich wird "Summe" auch in Bereichen wie Bildverarbeitung und statistischer Analyse verwendet. Eine ausgezeichnete "Summe" -Funktion sollte eine gute Lesbarkeit, Robustheit und Effizienz haben.

Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...

Das Problem der Verwendung von RETISTREAM zur Implementierung von Nachrichtenwarteschlangen in der GO -Sprache besteht darin, die Go -Sprache und Redis zu verwenden ...

Zwei Möglichkeiten, Strukturen in der GO -Sprache zu definieren: Der Unterschied zwischen VAR- und Typ -Schlüsselwörtern. Bei der Definition von Strukturen sieht die Sprache oft zwei verschiedene Schreibweisen: Erstens ...

Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Bei der Verwendung von Goland für GO -Sprachentwicklung begegnen viele Entwickler benutzerdefinierte Struktur -Tags ...
