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.
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 :
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel()
http.Request
: http.Request
:// 根据 ctx 处理上传的文件 if err := handler.HandleUpload(req.Context(), req); err != nil { // 根据错误做出响应 }
ctx.Err()
// 检查是否因超时而取消 if ctx.Err() == context.DeadlineExceeded { // 根据超时做出响应 }
ctx.Err()
pour vérifier si l'opération a été annulé en raison d'un délai d'attente : Ce qui suit est un exemple pratique de téléchargement de fichier en utilisant le délai d'attente contextuel : 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!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)
}