Maison >développement back-end >Golang >Go peut-il remplacer efficacement ThreadLocal de Java pour les données spécifiques au contexte ?
Données spécifiques au contexte dans Go : une alternative au ThreadLocal de Java
Lorsque vous travaillez avec des routines Go, la possibilité d'accéder à des données spécifiques au contexte peut être crucial pour suivre les métriques ou effectuer des opérations basées sur des informations spécifiques à la demande. Pour y parvenir en Java, la classe ThreadLocal est souvent utilisée pour stocker les données associées au thread actuel.
Go peut-il émuler le ThreadLocal de Java ?
Go fournit-il un mécanisme pour ThreadLocal de Java ? La réponse n'est pas simple.
Approches alternatives
Package contextuel de Go
Le package contextuel de Go offre un moyen plus propre de transmettre les requêtes. informations spécifiques sur les fonctions et les goroutines. Il fournit des objets de contexte qui peuvent être facilement créés, propagés et annulés.
Exemple
Pour mesurer le temps d'accès à la base de données dans une requête, vous pouvez créer un contexte avec une date limite et transmettez-la à la fonction d'accès à la base de données comme argument :
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) }
En passant explicitement le contexte, vous pouvez vous assurer que les données sont partagées uniquement dans le délai souhaité portée et avoir un meilleur contrôle sur sa durée de vie.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!