La gestion du contexte dans Go fournit un moyen de transmettre des données entre différentes parties de l'application et de gérer l'annulation. Cependant, le défi se pose lorsque vous avez besoin d'un contexte qui hérite des données d'origine mais reste non affecté par son annulation.
Pour répondre à ce besoin, Go 1.21 introduit la méthode WithoutCancel dans le package de contexte, qui remplit cette exigence.
Alternativement, si vous utilisez une version antérieure de Go, vous pouvez créer votre propre implémentation de contexte spécialement conçue pour empêcher l'annulation. Voici comment :
import ( "context" "time" ) type noCancel struct { ctx context.Context } func (c noCancel) Deadline() (time.Time, bool) { return time.Time{}, false } func (c noCancel) Done() <-chan struct{} { return nil } func (c noCancel) Err() error { return nil } func (c noCancel) Value(key interface{}) interface{} { return c.ctx.Value(key) } // WithoutCancel returns a context that is never canceled. func WithoutCancel(ctx context.Context) context.Context { return noCancel{ctx: ctx} }
Avec cette implémentation de contexte personnalisé, vous pouvez obtenir une copie du contexte d'origine qui :
Cette approche vous permet d'exécuter des tâches asynchrones dans des goroutines distinctes, garantissant leur exécution même lorsque le contexte parent est terminé.
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!