En Go, les contextes sont un outil puissant pour gérer le cycle de vie du goroutine, en particulier pour l'annulation et l'application des échéances. Le package context
dans GO fournit un moyen de passer des données à la demande de demande, des signaux d'annulation et des délais à travers les limites de l'API et entre les processus.
Pour utiliser des contextes pour gérer l'annulation et les délais de goroutine, vous commencez par créer un contexte. Les fonctions context.Background()
ou context.TODO()
sont utilisées pour créer un contexte racine, qui est ensuite utilisé pour dériver des contextes plus spécifiques. Par exemple, pour annuler un Goroutine, vous utilisez context.WithCancel(parent)
pour créer un contexte qui peut être annulé. Lorsque vous souhaitez annuler tous les Goroutines partageant ce contexte, vous appelez la fonction Annuler renvoyée par context.WithCancel
.
Pour gérer les délais, vous utilisez context.WithDeadline(parent, deadline)
ou context.WithTimeout(parent, timeout)
pour créer un contexte qui annulera automatiquement après la date limite ou le délai d'expiration spécifié.
Voici un exemple simple de la façon dont vous pourriez utiliser un contexte pour gérer le cycle de vie d'un Goroutine:
<code class="go">ctx, cancel := context.WithCancel(context.Background()) defer cancel() go func() { for { select { case </code>
L'utilisation de contextes pour la gestion de Goroutine en Go offre plusieurs avantages:
Le réglage et context.WithTimeout
gestion des délais utilisant des contextes dans GO implique l'utilisation du context.WithDeadline
. Voici comment vous pouvez le faire:
context.WithDeadline
. Cette fonction prend un contexte parent et une valeur de temps pour la date limite.context.WithTimeout
. Cette fonction prend un contexte parent et une durée.Voici un exemple de fixation d'une échéance et de la manipulation:
<code class="go">ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(5*time.Second)) defer cancel() go func() { for { select { case </code>
Dans cet exemple, le Goroutine fonctionnera jusqu'à ce que la date limite soit atteinte ou elle est annulée manuellement.
Les contextes de GO sont particulièrement utiles pour propager des signaux d'annulation à travers plusieurs goroutines. Lorsque vous créez un contexte avec context.WithCancel
, context.WithDeadline
ou context.WithTimeout
, vous pouvez partager ce contexte avec plusieurs Goroutines. Lorsque le contexte est annulé (manuellement ou en raison d'une échéance atteinte), tous les goroutines qui regardent le contexte seront notifiés via le canal ctx.Done()
.
Voici comment cela fonctionne:
ctx.Done()
pour savoir quand il devrait arrêter de fonctionner.Voici un exemple démontrant ceci:
<code class="go">ctx, cancel := context.WithCancel(context.Background()) defer cancel() go func() { for { select { case </code>
Dans cet exemple, les deux Goroutines s'arrêteront après 3 secondes lorsque le contexte est annulé. Cela montre comment les contextes aident à propager efficacement les signaux d'annulation à travers plusieurs goroutines.
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!