Maison >développement back-end >Golang >Go Context — TODO() vs Background() Plus de confusion !

Go Context — TODO() vs Background() Plus de confusion !

PHPz
PHPzoriginal
2024-09-10 06:33:32995parcourir

Go Context — TODO() vs Background() No more confusing!

Dans Go, le package contextuel permet de gérer les valeurs liées aux requêtes, les signaux d'annulation et les délais.
Deux manières courantes de démarrer un contexte sont context.TODO() et context.Background().
Bien qu'ils se comportent de la même manière, ils servent des objectifs différents.

contexte.Background()

context.Background() est la valeur par défaut lorsque vous n'avez besoin d'aucune gestion particulière (comme l'annulation ou les délais).
Il est souvent utilisé dans main, init ou lors de l'initialisation d'opérations qui ne nécessitent pas de contexte plus spécifique.

Exemple:

 func main() {
     ctx := context.Background()
     server := http.Server{Addr: ":8080", BaseContext: func(net.Listener) context.Context {
         return ctx
     }}
     log.Fatal(server.ListenAndServe())
 }

Dans cet exemple, context.Background() est utilisé pour établir un contexte de base pour le serveur HTTP.

contexte.TODO()

context.TODO() est un contexte d'espace réservé. Utilisez-le lorsque vous n'êtes pas sûr du contexte à fournir ou lorsque vous prévoyez de refactoriser plus tard.

Exemple:

 func processOrder() {
     ctx := context.TODO() // Placeholder, decision on context pending
     err := db.SaveOrder(ctx, orderData)
     if err != nil {
         log.Println("Failed to save order:", err)
     }
 }

Ici, context.TODO() est temporairement utilisé pour une opération de base de données jusqu'à ce qu'un contexte plus spécifique soit défini.

Différences clés

Les deux fonctions renvoient un contexte vide, mais elles expriment des intentions différentes :

  • context.Background() : utilisé lorsque vous êtes sûr qu'aucune fonctionnalité contextuelle spéciale n'est nécessaire.
  • context.TODO() : Un contexte d'espace réservé temporaire, signalant les changements futurs.

Conclusion

Quand utiliser context.Background() :

  • Lors de l'initialisation des services de base tels que les serveurs HTTP ou les connexions à une base de données.
  • Quand il n'y a pas besoin d'annulation, de délais ou de valeurs.

Quand utiliser context.TODO() :

  • Lors du refactoring, et vous n'avez pas encore décidé du contexte.
  • Lors de la mise en œuvre d'un code à un stade précoce qui nécessite des améliorations futures.

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