le contexte a été inclus dans la bibliothèque standard depuis Go1.7. Son utilisation principale, en une phrase, est de contrôler le cycle de vie de la goroutine. Lorsqu'une tâche informatique est reprise par une goroutine et que nous voulons abandonner la tâche informatique de la goroutine pour une raison quelconque (timeout ou sortie forcée), alors ce contexte est utilisé. (Apprentissage recommandé : GO )
Pour les développeurs Golang, le package Context (context) ne doit pas être étranger. Mais bien souvent, nous sommes paresseux et venons de voir le rôle qu’il peut jouer, sans nous y plonger. Scénario d'application : Dans le package http Server of the Go, chaque requête a une goroutine correspondante pour la gérer. Les fonctions de traitement des requêtes démarrent généralement des goroutines supplémentaires pour accéder aux services back-end, tels que les bases de données et les services RPC. La goroutine utilisée pour traiter une demande doit généralement accéder à certaines données spécifiques à la demande, telles que les informations d'authentification de l'identité de l'utilisateur final, les jetons liés à la vérification et la date limite de la demande. Lorsqu'une requête est annulée ou expire, toutes les goroutines utilisées pour traiter la requête doivent se fermer rapidement avant que le système puisse libérer les ressources occupées par ces goroutinesPrincipe du contexte
Les appels de contexte doivent être chaînés et les nouveaux contextes sont dérivés via WithCancel, WithDeadline, WithTimeout ou WithValue. Lorsqu'un contexte parent est annulé, tous les contextes qui en dérivent seront annulés. Passer context.WithXXX renverra un nouveau Context et CancelFunc. L’appel de CancelFunc annulera l’enfant, supprimera la référence du parent à l’enfant et arrêtera tous les minuteurs. Le fait de ne pas appeler CancelFunc entraînera une fuite des enfants jusqu'à ce que le parent soit annulé ou qu'une minuterie se déclenche. L'outil go vet vérifie tous les chemins de contrôle de processus à l'aide de CancelFuncs.Suivez les règles
Suivez les règles suivantes pour maintenir la cohérence des interfaces entre les packages et activer les outils d'analyse statique pour vérifier la propagation du contexte. Ne mettez pas de contextes dans la structure. Au lieu de cela, le contexte doit être transmis comme premier paramètre et nommé ctx. func DoSomething(ctx context.Context, arg Arg) error { // ... use ctx ... }Ne pas passer dans un Context nul même si la fonction le permet. Si vous ne savez pas quel contexte utiliser, vous pouvez utiliser context.TODO(). Les méthodes liées aux valeurs utilisant le contexte ne doivent être utilisées que pour les métadonnées liées aux requêtes transmises dans les programmes et les interfaces. Ne les utilisez pas pour transmettre certains paramètres facultatifs. Le même contexte peut être transmis à différentes goroutines. ; Le contexte est sécurisé en matière de concurrence.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!