go - 在 gin 中使用 go-assets 的示例
问题描述
我想为 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
}
我使用这个文件列表并将其提供给静态端点,并带有一些逻辑。
我已阅读以下有关使用 go-assets 的文档
- https://github.com/jessevdk/go-assets-builder/blob/master/builder.go
- https://github.com/jessevdk/go-assets-builder
- https://github.com/jessevdk/go-assets/blob/master/generate.go
以及这个杜松子酒的具体例子:
- https://github.com/gin-gonic/gin/blob/master/examples/assets-in-binary/assets.go
- https://github.com/jessevdk/go-assets/blob/master/example_test.go
- https://github.com/gin-gonic/gin/tree/master/examples/assets-in-binary
其中包含以下示例:
准备包裹
去获取 github.com/gin-gonic/gin 去获取 github.com/jessevdk/go-assets-builder
生成 assets.go
go-assets-builder html -o assets.go
构建服务器
go build -o assets-in-binary
跑
./assets-in-binary
但是,我不清楚如何调用我构建的这个文件。例如,我要在我的getFileList()
函数中更改什么以指向我在二进制文件中构建的任何内容,它甚至被称为什么,我怎么知道?
解决方案
通常在 gin 上你会使用,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
您可以获取文件夹中的文件列表,创建地图并将该地图用于静态处理程序(以限制访问哪些文件)
推荐阅读
- typescript - 如何在 Typescript 类中将客户端传递的配置对象与默认配置对象合并?
- python - 排序QTableView时如何保留选择
- python - 2D 热方程 - 添加初始条件并检查 Dirichlet 边界条件是否正确
- python - 如何在python中从列表转换为json?
- javascript - 无法从 Windows10 连接到 Raspberry Pi 上的本地 mysql 数据库
- javascript - 如何在包含其他元素的 contenteditable div 中设置插入符号位置?
- string - VB.NET - 查找一个字符后跟一个句点并删除句点
- javascript - 如何在 JS 中获取所有匹配的数据?
- typescript - 使用 Pick 为具有索引类型的对象构造类型
- python - 使用列表和多个数据框查找数据框