Kontextspezifische Daten in Go: Eine Alternative zu Javas ThreadLocal
Bei der Arbeit mit Go-Routinen besteht die Möglichkeit, auf kontextspezifische Daten zuzugreifen kann für die Verfolgung von Metriken oder die Durchführung von Vorgängen auf der Grundlage anforderungsspezifischer Informationen von entscheidender Bedeutung sein. Um dies in Java zu erreichen, wird die ThreadLocal-Klasse häufig zum Speichern von Daten verwendet, die mit dem aktuellen Thread verknüpft sind.
Kann Go ThreadLocal von Java emulieren?
Bietet Go ein ähnliches Element? Mechanismus zu Javas ThreadLocal? Die Antwort ist nicht einfach.
Alternative Ansätze
Kontextpaket von Go
Das Kontextpaket in Go bietet eine sauberere Möglichkeit, Anfragen weiterzuleiten. Spezifische Informationen über Funktionen und Goroutinen hinweg. Es stellt Kontextobjekte bereit, die einfach erstellt, weitergegeben und gelöscht werden können.
Beispiel
Um die Datenbankzugriffszeit innerhalb einer Anfrage zu messen, können Sie einen Kontext mit erstellen Geben Sie eine Frist ein und übergeben Sie diese als Argument an die Datenbankzugriffsfunktion:
package main import ( "context" "fmt" "sync" "time" ) var startTime sync.Map func getDBAccessTime(ctx context.Context, query string) (time.Duration, error) { t := startTime.Load(ctx) if t == nil { t = time.Now() startTime.Store(ctx, t) } startTimeStamp := t.(time.Time) // Database access logic return time.Since(startTimeStamp), nil } func main() { ctx := context.Background() ctx, cancel := context.WithTimeout(ctx, 5*time.Second) defer cancel() duration, err := getDBAccessTime(ctx, "SELECT * FROM users") fmt.Printf("Database access time: %s\n", duration) }
Durch die explizite Übergabe des Kontexts können Sie sicherstellen, dass Daten nur im gewünschten Umfang geteilt werden haben Sie eine bessere Kontrolle über seine Lebensdauer.
Das obige ist der detaillierte Inhalt vonKann Go Javas ThreadLocal für kontextspezifische Daten effektiv ersetzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!