Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggunakan tamat masa konteks dalam muat naik fail Golang?

Bagaimana untuk menggunakan tamat masa konteks dalam muat naik fail Golang?

WBOY
WBOYasal
2024-06-01 19:20:01685semak imbas

Menggunakan tamat masa konteks untuk muat naik fail dalam Go boleh menghalang pelayan daripada menunggu lama untuk klien menyelesaikan muat naik. Kaedah termasuk: 1) Buat objek konteks baharu dan tetapkan nilai tamat masa; 2) Hantar objek konteks kepada operasi fail 3) Gunakan ctx.Err() untuk menyemak sama ada operasi telah dibatalkan kerana tamat masa. Contoh praktikal: 1) Tetapkan tamat masa muat naik; 2) Parsing borang; 3) Proses fail; Contoh ini memastikan bahawa muat naik selesai dalam masa 10 saat atau mengembalikan ralat tamat masa.

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

Menggunakan tamat masa konteks semasa memuat naik fail dalam Go

Menetapkan tamat masa menggunakan pakej konteks dalam Go adalah penting untuk mengendalikan senario muat naik fail. Ia membolehkan kami mengehadkan masa operasi muat naik dan menghalang pelayan daripada menunggu lama untuk klien menyelesaikan muat naik.

Cara menggunakan

Anda boleh menggunakan tamat masa konteks dalam muat naik fail menggunakan langkah-langkah berikut:

  1. Buat objek konteks baharu dan tetapkan nilai tamat masa yang sesuai:
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
  1. objek untuk Passs yang mengendalikan operasi Fail muat naik, seperti http.Request: http.Request
// 根据 ctx 处理上传的文件
if err := handler.HandleUpload(req.Context(), req); err != nil {
    // 根据错误做出响应
}
  1. 使用 ctx.Err()
  2. // 检查是否因超时而取消
    if ctx.Err() == context.DeadlineExceeded {
        // 根据超时做出响应
    }
      Gunakan ctx.Err() untuk menyemak sama ada operasi telah dibatalkan kerana tamat masa:

      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)
      }

      Kes praktikal

      Berikut ialah contoh praktikal muat naik fail menggunakan tamat masa konteks:

      rrreee🎜Dalam contoh ini, kami menetapkan tamat masa muat naik fail kepada 10 saat, dan jika muat naik tidak selesai dalam masa ini, kembalikan ralat Tamat Masa. 🎜

    Atas ialah kandungan terperinci Bagaimana untuk menggunakan tamat masa konteks dalam muat naik fail Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn