Maison  >  Article  >  développement back-end  >  Comment utiliser le délai d'expiration du contexte dans le téléchargement de fichiers Golang ?

Comment utiliser le délai d'expiration du contexte dans le téléchargement de fichiers Golang ?

WBOY
WBOYoriginal
2024-06-01 19:20:01737parcourir

L'utilisation du délai d'attente contextuel pour le téléchargement de fichiers dans Go peut empêcher le serveur d'attendre longtemps que le client termine le téléchargement. Les méthodes incluent : 1) Créer un nouvel objet contextuel et définir la valeur du délai d'attente ; 2) Transmettre l'objet contextuel à l'opération sur le fichier ; 3) Utiliser ctx.Err() pour vérifier si l'opération a été annulée en raison d'un délai d'attente ; Exemples pratiques : 1) Définir le délai d'expiration du téléchargement ; 2) Analyser le formulaire 3) Traiter le fichier 4) Vérifier si l'opération a été annulée en raison d'un délai d'attente ; Cet exemple garantit que le téléchargement se termine dans les 10 secondes ou renvoie une erreur de délai d'attente.

Golang 文件上传中如何使用 context 超时?

Utilisation du délai d'expiration du contexte lors du téléchargement de fichiers dans Go

La définition de délais d'attente à l'aide du package de contexte dans Go est cruciale pour gérer les scénarios de téléchargement de fichiers. Cela nous permet de limiter le temps de l'opération de téléchargement et d'éviter que le serveur n'attende longtemps que le client termine le téléchargement.

Comment utiliser

Vous pouvez utiliser le délai d'expiration du contexte dans les téléchargements de fichiers en suivant les étapes suivantes :

  1. Créez un nouvel objet de contexte et définissez une valeur de délai d'expiration appropriée :
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
  1. Passez l'objet de contexte à celui-ci. qui gère les opérations de téléchargement de fichiers, telles que http.Request : http.Request
// 根据 ctx 处理上传的文件
if err := handler.HandleUpload(req.Context(), req); err != nil {
    // 根据错误做出响应
}
  1. 使用 ctx.Err()
  2. // 检查是否因超时而取消
    if ctx.Err() == context.DeadlineExceeded {
        // 根据超时做出响应
    }
      Utilisez ctx.Err() pour vérifier si l'opération a été annulé en raison d'un délai d'attente :

      package main
      
      import (
          "context"
          "net/http"
          "time"
      )
      
      // 设定文件上传超时为 10 秒
      const uploadTimeout = 10 * time.Second
      
      type handler struct{}
      
      func (h *handler) HandleUpload(ctx context.Context, r *http.Request) error {
          // 解析上传的表单
          if err := r.ParseMultipartForm(int64(5e6)); err != nil {
              return err
          }
      
          // 处理上传的文件
          // ...
      
          // 检查是否因超时而取消
          if ctx.Err() == context.DeadlineExceeded {
              return http.ErrRequestTimeout
          }
      
          return nil
      }
      
      func main() {
          http.Handle("/upload", &handler{})
      
          http.ListenAndServe(":8080", nil)
      }

      Cas pratique

      Ce qui suit est un exemple pratique de téléchargement de fichier en utilisant le délai d'attente contextuel :

      rrreee🎜Dans cet exemple, nous définissons le délai d'expiration du téléchargement du fichier à 10 secondes, et si le téléchargement n'est pas terminé dans ce délai, renvoie une erreur Timeout. 🎜

    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