前言

开发一个网站,会分为前端和后端,它们都有许多技术可选,但是都不得不面临一个问题是交付的时候需要交付两份产物。

有没有办法只需要交付一个文件就行?

答案是肯定的,今天来讲一下 Go 语言中嵌入网页,打包成一个文件。

embed

Go 语言在 1.16 版本开始支持内嵌的技术,叫作 embed ,它可以把文件或者目录,直接嵌入到 Go 语言编译的可执行文件中。

通过这个技术就能够实现前端和后端只需要一个文件就全搞定。

下面来看一个使用 Gin 框架结合 embed 实现一个网站的效果

1
2
3
4
5
6
7
//go:embed dist
var f embed.FS

router := gin.Default()
fp, _ := fs.Sub(f, "dist")
router.StaticFS("/", http.FS(fp))
router.Run(":8080")

使用 embed 的语法就是在 embed.FS 的变量的上面加上一行注释

1
//go:embed <这里跟要嵌入的文件名或者目录>

简单的两行代码就实现了嵌入功能,非常方便。