使用Golang开发一些小程序时,可能需要一些配置或是监控信息显示给用户,这时候需要做一个web界面对数据进行展示或是配置。我们在打包发布时显示不希望还要附带一些文件及文件夹。这时候想直接把web文件打包到二进制文件里。这时候使用packr2这个工具可以实现。
第一: packr2
packr2 地址:https://github.com/gobuffalo/packr
1、项目里引用此包
go get -u github.com/gobuffalo/packr/v2
2、安装二进制文件,为了打包时把文件打进发布包里
go get -u github.com/gobuffalo/packr/v2/packr2
第二:gin,我的项目里使用的gin这个web框架
目录结构:

1、正常使用是这样的:这样需要把views放在打包后的可执行文件同目录下
router := gin.Default()
router.Static("/static", "./views/static")
router.Run("0.0.0.0:8080")
2、改用packr2打包静态文件后,是这样的
box := packr.New("webBox", "./views")
router := gin.Default()
router.GET("/static/*name", func(c *gin.Context) {
name := c.Param("name")
logger.Info(" name file path %s", name)
data, err := box.Find("static"+name)
if err != nil {
logger.Error("file no found %v ", err)
}
contentType:="text/plain"
if strings.LastIndex(name,"css")>0 {
contentType = "text/css"
}
c.Data(200, contentType, data)
})
router.Run("0.0.0.0:8080")
第三:打包顺序
1、先在项目目录里运行: packr2 它会将静态文件打包到一个go文件里。

2、再运行自己的打包文件命令。 如: go build
希望大家打包顺利!
本文介绍了如何使用Golang的packr2工具将静态文件(如web界面)打包到二进制文件中,以避免发布时携带额外文件。通过在项目中引入packr2,结合gin web框架,调整目录结构,并遵循特定的打包顺序,可以实现静态资源的内嵌。首先运行packr2打包静态文件到go文件,然后执行go build构建最终的可执行文件。
4967





