Я работаю над небольшим веб-приложением Go, которое предназначено для использования в качестве инструмента на машине разработчика, чтобы помочь отладить свои приложения/веб-службы. Интерфейс к программе - это веб-страница, которая включает не только HTML, но и некоторый JavaScript (для функциональности), изображения и CSS (для стилизации). Я планирую открыть это приложение, чтобы пользователи могли просто запускать Makefile, и все ресурсы будут идти туда, куда им нужно идти. Тем не менее, я также хотел бы иметь возможность просто распространять исполняемый файл с максимально возможным количеством файлов/зависимостей. Есть ли хороший способ связать HTML/CSS/JS с исполняемым файлом, поэтому пользователям приходится загружать и беспокоиться об одном файле?
Прямо сейчас, в моем приложении, обслуживание статического файла выглядит примерно так:
// called via http.ListenAndServe
func switchboard(w http.ResponseWriter, r *http.Request) {
// snipped dynamic routing...
// look for static resource
uri := r.URL.RequestURI()
if fp, err := os.Open("static" + uri); err == nil {
defer fp.Close()
staticHandler(w, r, fp)
return
}
// snipped blackhole route
}
Так что это довольно просто: если запрошенный файл существует в моем статическом каталоге, вызовите обработчик, который просто открывает файл и пытается установить хороший Content-Type
перед подачей. Я думал, что нет причин, по которым это должно основываться на реальной файловой системе: если бы были скомпилированные ресурсы, я мог просто индексировать их по URI запроса и обслуживать их как таковые.
Если нет хорошего способа сделать это, или я лаяю неправильное дерево, пытаясь сделать это, дайте мне знать. Я просто решил, что конечный пользователь будет оценивать как можно меньше файлов.
Если есть более подходящие теги, чем go, не стесняйтесь добавлять их или сообщать мне.