https://golang.org/pkg/embed/
Go编译的程序非常适合部署,如果没有通过CGO引用其它的库的话,我们一般编译出来的可执行二进制文件都是单个的文件,非常适合复制和部署。在实际使用中,除了二进制文件,可能还需要一些配置文件,或者静态文件,比如html模板、静态的图片、CSS、javascript等文件,如何这些文件也能打进到二进制文件中,那就太美妙,我们只需复制、按照单个的可执行文件即可。
一些开源的项目很久以前就开始做这方面的工作,比如gobuffalo/packr、markbates/pkger、rakyll/statik、knadh/stuffbin等
Go 1.16中包含了go embed的功能
对于单个的文件,支持嵌入为字符串和 byte slice
对于多个文件和文件夹,支持嵌入为新的文件系统FS
go:embed指令用来嵌入,必须紧跟着嵌入后的变量名
//go:embed hello.txt
var s string
//go:embed hello.txt
var b []byte
//go:embed hello.txt
//go:embed hello2.txt
var f embed.FS
嵌入的内容是只读的。也就是在编译期嵌入文件的内容是什么,那么在运行时的内容也就是什么。
FS文件系统值提供了打开和读取的方法,并没有write的方法,也就是说FS实例是线程安全的,多个goroutine可以并发使用
https://colobu.com/2021/01/17/go-embed-tutorial/
https://www.flysnow.org/2021/02/28/golang-embed-for-web.html
https://zhuanlan.zhihu.com/p/351931501
https://blog.carlmjohnson.net/post/2021/how-to-use-go-embed/
https://deepzz.com/post/how-to-use-go-embed.html