Maison  >  Article  >  Qu'est-ce que CTX en Golang

Qu'est-ce que CTX en Golang

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌original
2023-06-09 14:34:082672parcourir

ctx en Golang est l'abréviation de Context, qui est un type dans la bibliothèque standard et est utilisé pour transférer des métadonnées telles que des valeurs spécifiques à la portée de la demande, des signaux d'annulation et des délais entre « goroutines ».

Qu'est-ce que CTX en Golang

Le système d'exploitation de ce tutoriel : système Windows 10, version Go1.20.1, ordinateur Dell G3.

En Golang, ctx est l'abréviation de Context, qui est un type dans la bibliothèque standard. Le type

Context est utilisé pour transmettre des métadonnées telles que des valeurs spécifiques à la portée de la demande, des signaux d'annulation et des délais entre les goroutines. Lors de la création d'une requête, un contexte racine peut être créé et transmis dans la chaîne d'appels tout au long de l'application. Au fur et à mesure que les requêtes se propagent, ce contexte peut être copié par d'autres goroutines et utilisé pour la communication sous-jacente.

Les principales fonctions de ctx sont :

  • Transmission de métadonnées : dans la chaîne d'appel réseau de requête HTTP, certaines informations de métadonnées (telles que le jeton d'autorisation utilisateur) doivent être transmises et utilisées en cours de route. ctx est la méthode préférée pour. mettre en œuvre ce scénario.

  • Expiration et annulation du flux de contrôle : dans les chaînes d'appels imbriquées à plusieurs niveaux, les erreurs doivent souvent traverser chaque couche de chaînes d'appels. Dans certains cas, Goroutine doit même être annulé en même temps. méthode pour résoudre de tels problèmes.

Ce qui suit est un exemple de code simple qui illustre comment utiliser ctx pour contrôler l'annulation et le délai d'attente de goroutine.

func main() {
   ctx, cancel := context.WithCancel(context.Background())
   defer cancel() // 常用结合 defer 安排执行
   go doSomething(ctx)
   time.Sleep(10 * time.Second)
}
func doSomething(ctx context.Context) {
   select {
      case <-time.After(time.Hour):
         fmt.Println("do something")
      case <-ctx.Done():
         fmt.Println("canceled by user:", ctx.Err())
      }
}

Dans l'exemple de code, un contexte est créé à l'aide de `context.WithCancel` et porte la fonction d'annulation (`cancel()`), puis la transmet à la fonction `doSomething`. Dans `doSomething`, 2 des canaux sont surveillés via `select`. Lorsque 10 secondes s'écoulent, la goroutine principale exécute la fonction `cancel`, envoyant ainsi un signal Terminé à `ctx`, ce qui provoque la réception de la goroutine de `doSomething`. ce signal et

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn