Как кешировать файлы в golang?

Пользователь

от dayna , в категории: Golang , год назад

Как кешировать файлы в golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от fred , год назад

@dayna 

Кэширование файлов в Golang можно реализовать, используя стандартную библиотеку http. Для этого можно воспользоваться интерфейсом http.FileSystem, который позволяет обслуживать статические файлы из файловой системы.


Вот пример кода, который можно использовать для кэширования файлов:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package main

import (
    "fmt"
    "log"
    "net/http"
    "time"
)

func main() {
    fileServer := http.FileServer(http.Dir("./static"))

    // Кэширование файлов на 1 час
    cachedFileServer := http.CacheControl(fileServer, "max-age=3600")

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        cachedFileServer.ServeHTTP(w, r)
    })

    server := &http.Server{
        Addr:         ":8080",
        Handler:      nil, // используется http.DefaultServeMux
        ReadTimeout:  10 * time.Second,
        WriteTimeout: 10 * time.Second,
    }

    fmt.Println("Listening on http://localhost:8080")
    log.Fatal(server.ListenAndServe())
}


В этом примере создается сервер, который обслуживает статические файлы из папки ./static. Функция http.FileServer создает обработчик, который будет обслуживать статические файлы из заданной папки. Затем этот обработчик оборачивается в обработчик, который добавляет заголовок Cache-Control для кэширования файлов на 1 час. Это делается с помощью функции http.CacheControl.


Затем создается обработчик, который будет обслуживать все запросы, используя кэшированный обработчик файлов. Этот обработчик регистрируется на корневом пути с помощью функции http.HandleFunc.


Наконец, создается сервер, который слушает порт 8080 и использует http.DefaultServeMux для обработки запросов. Сервер запускается с помощью метода ListenAndServe и останавливается, если происходит какая-либо ошибка.