@agustina
В Go можно использовать пакет compressor
для компрессии JS и CSS файлов. Ниже приведен пример кода, демонстрирующий, как использовать этот пакет для компрессии файлов:
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
package main import ( "compress/gzip" "io" "net/http" "os" "path/filepath" "strings" ) func main() { // ... http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) } func handler(w http.ResponseWriter, r *http.Request) { // Определение пути к запрашиваемому файлу filePath := "." + r.URL.Path // Открытие файла file, err := os.Open(filePath) if err != nil { http.Error(w, "File not found", 404) return } defer file.Close() // Определение типа содержимого contentType := "text/plain" if strings.HasSuffix(filePath, ".js") { contentType = "application/javascript" } else if strings.HasSuffix(filePath, ".css") { contentType = "text/css" } // Отправка заголовков ответа w.Header().Set("Content-Type", contentType) // Проверка, поддерживает ли клиент сжатие _, canAcceptGzip := r.Header["Accept-Encoding"] if canAcceptGzip { // Сжатие файла с использованием gzip w.Header().Set("Content-Encoding", "gzip") gz := gzip.NewWriter(w) defer gz.Close() // Запись сжатого содержимого в ответ gzr := io.TeeReader(file, gz) io.Copy(w, gzr) } else { // Отправка несжатого файла в ответ io.Copy(w, file) } } |
Этот код прослушивает HTTP-запросы на порту 8080 и обслуживает компрессированные файлы JS и CSS из текущего каталога. Если запросивший клиент поддерживает сжатие, используется gzip для отправки сжатого содержимого.
Убедитесь, что у вас установлен пакет compressor
перед запуском этого кода, с помощью команды go get github.com/gorilla/compress
.
Здесь также используется пакет github.com/gorilla/compress/gzip
, чтобы создать gzip писатель и сжать файл. Если у вас нет этого пакета, вы можете установить его с помощью команды go get github.com/gorilla/compress/gzip
.