Golang Go语言中 有用过 packr 这个包吗?请教几个问题

发布于 1周前 作者 sinazl 来自 Go语言

Golang Go语言中 有用过 packr 这个包吗?请教几个问题

github 链接:github.com/gobuffalo/packr/tree/master/v2

我想用它把前端文件打包的 go 的 binary 文件里

参照官方文档的步骤,打包成功了,binary 也变大了许多,从文件大小上看应该是把前端文件给打进去了,但是我把前端文件删掉之后,访问就 404 了

难道还得保留前端文件吗?那这样的话打包还有什么意义呢?

Usage with HTTP:github.com/gobuffalo/packr/tree/master/v2#usage-with-http


更多关于Golang Go语言中 有用过 packr 这个包吗?请教几个问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

16 回复

打包进去了,但是我估计你用的地方 PATH 也许需要改。。。

更多关于Golang Go语言中 有用过 packr 这个包吗?请教几个问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html



我打包之后,先保留前端文件,运行正常。 当我把前端文件删了或者把文件夹改个名字就 404 了

其实为什么有把 static file 怼进去二进制文件里的需求?

#3 这样子的话就只需要部署一个二进制程序到服务器,不需要整个文件夹都过去了

打成 docker 镜像吧

对的。方便部署是一方面。 假如前后端分离的项目,前端要用 nginx 代理一个,后端也要用 Nginx 代理一下, 有点费事。


就这一个,而且还是交给客户部署。打成 docker,还得教他们用 docker…




那这样子你也可以把图片也跟 binary 一起给过去呀。文件夹跟文件,没什么区别啊。

如果操作没错的话应该不会有你说的删除就 404 的。

你是不是删除文件后又重新编译了一次然后再运行的?或者是直接 go run 执行?

没有的,我的步骤是 先 packr 然后 go build 出 binary 文件
然后运行这个 binary 文件,正常。 这时候删掉前端文件就 404 了

#10 直接 packr build 不用再 go build 了

等于说你直接把 packr 命令用来替换掉原来的 go 命令,参数不变

我试了下,直接 packr build 之后还是同样的问题。binary 文件大了许多,但是删掉前端文件夹后还是 404 了

我后端框架用的是 gin
代码是这样的:
box := packr.NewBox("./templates")
r.Any("/", gin.WrapH( http.FileServer(box)))
// api router
routers.Setup®

肯定是你的相对路径配置问题,或者没有执行编译转换

问题解决了

之前没仔细看用的是 v1 的版本,换成 v2 后就可以了。 不过 v2 有个 bug 是:too many redirects。 该了修改了源代码里一个地方,目前正常了

有一个外包项目,甲方有加密软件包的需求,所以需要打成一个 exe 文件,然后通过序列号打开应用。

作为IT领域的GO语言专家,对于Golang中的各类包有深入了解,packr这个包也有所接触。下面针对你的问题进行简要解答:

packr是一个在Go语言中用于将静态文件(如HTML、CSS、JS和图片等)嵌入到Go二进制文件中的工具/包。它使得开发者可以将这些文件打包进Go的可执行文件中,从而简化部署和分发。

关于packr的常见问题可能包括:

  1. 如何使用packr

    • 安装packr命令行工具。
    • 使用packr命令将静态文件打包。
    • 在Go代码中通过packr提供的API访问这些文件。
  2. packr的优势

    • 简化部署,因为所有文件都打包在一个二进制文件中。
    • 提高访问速度,因为文件是内嵌在二进制文件中的,不需要额外的I/O操作。
  3. 注意事项

    • 打包后的二进制文件可能会变大,因为包含了所有静态文件。
    • 需要确保packr版本与Go语言版本兼容。

希望这些信息对你有所帮助。如果你有更具体的问题或需要进一步的帮助,请随时提问。

回到顶部