V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
SuperMild
V2EX  ›  Go 编程语言

Go embed 初体验

  •  
  •   SuperMild ·
    ahui2016 · 2022-02-11 19:12:05 +08:00 · 2557 次点击
    这是一个创建于 811 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 文件里。

    8 条回复    2022-02-13 20:39:04 +08:00
    Glauben
        1
    Glauben  
       2022-02-11 19:48:15 +08:00
    --在开发阶段每次修改前端的内容,都需要执行一次 go build 才能反映变化

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

    @qfdk 感谢提醒!

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

    文档里可以说下持久化怎么处理的
    提供下参数 来支持配置数据存放目录
    可以不用 不能没有 🐶
    SuperMild
        6
    SuperMild  
    OP
       2022-02-12 15:37:47 +08:00
    @cs419 你这个意见非常合理,谢谢!已经加上相关功能和说明了。
    EscYezi
        7
    EscYezi  
       2022-02-13 04:32:52 +08:00 via iPhone
    go embed 确实好用,不过可以考虑用前后端分离的方式,前端开发不需要重启后端,开发完成再把前端打的包用 go embed 引入
    SuperMild
        8
    SuperMild  
    OP
       2022-02-13 20:39:04 +08:00
    @EscYezi 对,我目前就是采用类似的方式,只是我加了一个开关,在启动程序时可以选择用 go embed 里的资源还是用本地文件夹里的资源,如果选择本地文件夹,前端刷新就能看到变化。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2257 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 03:06 · PVG 11:06 · LAX 20:06 · JFK 23:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.