我想为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()
函数中要更改的内容现在指向二进制文件中内置的内容,它甚至被称为什么,我怎么知道呢?
答案 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
您可以获取文件夹中的文件列表,创建映射并将该映射用作静态处理程序(以限制访问哪些文件)