Go 1.16 embed

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



Category golang