В этой главе рассматривается фреймворк Go Iris и способы работы со статическими файлами. Иногда в проекте есть необходимость напрямую предоставлять доступ к некоторым статическим файлам пользователям. Каким образом это можно настроить?

Iris предоставляет статические файлы

func main() {
    app := iris.New()
	// Установка иконки страницы
    app.Favicon("./resources/favicon.ico")
	// Установка пути для статических файлов и привязка URL-маршрута
    app.HandleDir("/assets", iris.Dir("./assets"))

    app.Listen(":8080")
}

Метод HandleDir принимает третий опциональный параметр DirOptions:

type DirOptions struct {
    // По умолчанию "/"index.html". Если запрашиваемый путь оканчивается **/*/$IndexName, происходит перенаправление на **/*(/),
    // что приводит к обработке другим обработчиком, автоматически зарегистрированным фреймворком в качестве обработчика индекса,
    // если конечный разработчик не обработал это вручную.
    IndexName string
    // PushTargets файлы (соответствующие значения) для обслуживания без дополнительных клиентских запросов (HTTP/2 Push), когда конкретный запрашиваемый путь (ключ отображения без префикса)
    // запрашиваемый путь (ключ отображения без префикса) не является каталогом (это `IndexFile`) или когда следует.
// PushTargetsRegexp подобно `PushTargets`, но принимает регулярное выражение, которое будет сравниваться со всеми файлами в каталоге (рекурсивно).
// `IndexName` должен быть установлен.//
// Пример
// "/": regexp.MustCompile("((.*).js|(.*).css|(.*).ico)$")
// См. также `iris.MatchCommonAssets`.
PushTargetsRegexp map[string]*regexp.Regexp

// Кэширование для включения кэша в памяти и предварительно сжатых файлов.
Cache DirCacheOptions
// Когда файлы должны обслуживаться в сжатом состоянии.
Compress bool

// Перечислить файлы в текущем запрошенном каталоге, если `IndexName` не найден.
ShowList bool
// Если `ShowList` равно true, то эта функция будет использоваться для отображения списка файлов текущего запрошенного каталога (dir)
// вместо стандартного.
DirList DirListFunc

// Загрузить и сохранить в локальные файлы.
Attachments Attachments

// Опциональный валидатор для использования при проходе через каждый запрашиваемый ресурс.
AssetValidator func(ctx *context.Context, name string) bool
}