在gin

时间:2018-10-06 19:32:59

标签: go assets go-gin

我想为go-app提供一个二进制文件,而不是将静态文件与部署捆绑在一起。

我正在使用类似这样的函数来访问正在加载的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
}

我获取了此文件列表,并通过一些逻辑将其提供给静态端点。

我已阅读以下有关使用资产的文档

以及该杜松子酒的特定示例:

其中包含以下示例:

  

准备软件包

     

去获取github.com/gin-gonic/gin去获取   github.com/jessevdk/go-assets-builder

     

生成资产。go

     

go-assets-builder html -o asset.go

     

构建服务器

     

进行构建-o二进制资产

     

运行

     

./ assets-in-binary

但是,我不清楚如何调用我已构建的文件。例如,我在getFileList()函数中要更改的内容现在指向二进制文件中内置的内容,它甚至被称为什么,我怎么知道呢?

1 个答案:

答案 0 :(得分:1)

通常在杜松子酒上,您会使用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.GET("/static/*filepath", StaticHandler)

这允许通过以下方式访问静态资源:/static/css/style.css,并将加载文件css/style.css

您可以获取文件夹中的文件列表,创建映射并将该映射用作静态处理程序(以限制访问哪些文件)