Пример использования go-assets в джине - PullRequest
0 голосов
/ 06 октября 2018

Мне бы хотелось иметь один двоичный файл для go-приложения, а не связывать статические файлы вместе с развертыванием.

Я использую такую ​​функцию для доступа к PNG, которые я загружаю:

func getFileList(dir string) (fileList []os.FileInfo, err error) {
    // USAGE: 
    //    fileList,_ := getFileList(PNG_DIR)
    f, err := os.Open(PNG_DIR)
    defer f.Close()
    checkErr(err)
    fileList, err = f.Readdir(0)
    checkErr(err)
    return fileList, err
}

Я беру этот список файлов и обслуживаю его на статической конечной точке с некоторой логикой.

Я прочитал следующую документацию по использованию go-assets

А также этот конкретный пример джина:

В котором содержится следующий пример:

Подготовка пакетов

go get github.com/gin-gonic/gin go get github.com/jessevdk/go-assets-builder

Генерация assets.go

go-assets-builder html-o assets.go

Построить сервер

перейти к компоновке -o бинарные ресурсы

Выполнить

. / бинарные активы

Тем не менее, мне не ясно, как я называю этот файл у меня естьмы построили.Например, что я изменяю в своей функции getFileList(), чтобы теперь указывать на то, что я построил в двоичном файле, как он вообще называется и как я узнаю это?

1 Ответ

0 голосов
/ 07 октября 2018

Обычно на джине вы используете router.Statuc(path, dir), однако вы сказали, что сначала загрузите список файлов, и я думаю, вы позже будете использовать http.ServeFile.

С go-bindata у вас есть все файлы уже внутриисполняемый файл, вы можете получить к ним доступ, используя функцию Asset(file) ...

По сути, это очень простой статический обработчик для gin:

func StaticHandler(c *gin.Context) {
      p := c.Param("filepath")
      data, err := Assets(p)
      if err != nil { return }
      c.Writer.Write(data)
}

Вы можете зарегистрировать статический обработчик в своемrouter:

router.GET("/static/*filepath", StaticHandler)

Это позволяет получить доступ к статическим ресурсам следующим образом: /static/css/style.css и загрузит файл css/style.css

Вы можете получить списокфайлы внутри вашей папки, создайте карту и используйте эту карту для статического обработчика (для ограничения доступа к файлам)

...