Go embed 初体验

2022-02-11 19:12:05 +08:00
 SuperMild

Go embed (把静态资源打包进可执行文件中) 已经出来很久了,但我一直懒惰没用起来。最近对自己做的一个软件升级,尝试了一下,比想象中好用。

我做的是一个自用的密码管理器,给 MacOS, Windows, Linux 三大平台都打包了,大家可以试试看效果,下载地址 https://github.com/ahui2016/mima/releases/ 下载并解压缩后得到一个文件,无需安装,直接运行即可,通过 http://127.0.0.1 访问操作界面,如果遇到端口冲突可使用 -addr 参数修改端口,例如:

mima.exe -addr 127.0.0.1:8080

两种模式

如果单纯使用 Go embed, 由于静态资源都打包到可执行文件里了,在开发阶段每次修改前端的内容,都需要执行一次 go build 才能反映变化。也就说,发布时简单,但开发时很不方便。

解决办法也简单,增加一个 debug 模式即可:

mima.exe -debug

在 debug 模式下,修改前端的 HTML/JS 文件,不需要重新打包,不需要重启后端,只要刷新网页就行。(有时需要 Ctrl+Shift+R 强制刷新)

实现这个模式的代码在这个项目的 main.go 文件里。

2590 次点击
所在节点    Go 编程语言
8 条回复
Glauben
2022-02-11 19:48:15 +08:00
--在开发阶段每次修改前端的内容,都需要执行一次 go build 才能反映变化

可以用 FS 数组搞个别名,然后实现 Open 方法。按数组顺序判断一个 FS 有没有文件,有的话就显示。
qfdk
2022-02-11 20:44:26 +08:00
确实很好,本人项目用了 :) 另外修一下 xss 简单测试下 https://mimademo.ai42.xyz/public/search.html 搜索 test 有惊喜
hzz2
2022-02-11 21:24:11 +08:00
同样之前用 Go embed 改写了一个电影资源爬虫项目 https://github.com/hezhizheng/go-movies
SuperMild
2022-02-11 22:54:51 +08:00
@2435043xia 也是一个好办法

@qfdk 感谢提醒!

@hzz2 看到你的项目我才发现 gox !
cs419
2022-02-12 10:44:35 +08:00
持久化怎么做的
没装 是当前目录下 一个 sqlite 文件么

文档里可以说下持久化怎么处理的
提供下参数 来支持配置数据存放目录
可以不用 不能没有 🐶
SuperMild
2022-02-12 15:37:47 +08:00
@cs419 你这个意见非常合理,谢谢!已经加上相关功能和说明了。
EscYezi
2022-02-13 04:32:52 +08:00
go embed 确实好用,不过可以考虑用前后端分离的方式,前端开发不需要重启后端,开发完成再把前端打的包用 go embed 引入
SuperMild
2022-02-13 20:39:04 +08:00
@EscYezi 对,我目前就是采用类似的方式,只是我加了一个开关,在启动程序时可以选择用 go embed 里的资源还是用本地文件夹里的资源,如果选择本地文件夹,前端刷新就能看到变化。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/833285

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX