Как в golang сделать компрессию js/css файлов?

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

от agustina , в категории: Общие вопросы , год назад

Как в golang сделать компрессию js/css файлов?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket

1 ответ

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

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

@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.