go 1.5go 1.6embedvfsgen
使用Go embed关于go embed以及go 1.6更新了啥,可以去下面这些网站看看:
Embedding Vue.js Apps in Go :: hackandsla.sh
Go 1.16新特性embed打包静态资源文件 - InfoQ 写作平台
大概就是…你从1.6开始可以把各种玩意以字符串、字节切片、文件的方式嵌入到最终生成的二进制文件中。不过这里我仅使用了以文件的方式嵌入,其他的暂时还用不上。
这里我用的代码片段取自最近在深坑回填的项目,因为最开始并没有用到其他的第三方工具将静态文件嵌入二进制文件,因此修改起来挺简单的。不过最开始还是有遇到一些问题所以稍微记录一下。
对原有代码进行更改gorilla/mux./web/dist
而如果我们需要用go embed将前端的静态文件打包进二进制文件,所涉及的修改非常少。只需要在文件中加入如下的两行代码即可
go:embedserver\webService\webService.gono matching files found
道理我都懂,但 go embed 究竟该怎么用? – Light Cube (github.red)
才恍(万)然(马)大(奔)悟(腾)。于是再捣鼓捣鼓,得到了第一次修改后的代码:
在写这里的代码的时候参考了下面的文章:
go - Where is index.html in an embedded directory? - Stack Overflow
修改后的代码中,将go embed声明放在了main.go文件中,同时又因为使用的位置在webService.go中,因此在webService.go下也声明了一个embed.FS类型的全局变量,并在main.go中传值过去。
修改好后试了一下,诶~编译成功了~!于是运行程序用浏览器打开前端的地址瞅瞅,结果看到了冰冷冷的目录列表:
./web/dist
dir
再次修改完成后,编译运行,可以看见正常的网页了:
总结go embed 只能读取到它所在.go文件所属的目录及其子目录的内容,无法读取上级目录
go embed 所生成的文件系统会连着原文件的目录结构一起存入,若需要将指定文件夹作为根目录使用,则可以使用Sub函数来生成一个子文件系统。
一些吐槽:怎么不支持Markdown格式了......引用文章的链接也吞掉了......嘛不过因为原先的博客服务器懒得续费了就先暂时发在这里吧。