本文目标
- 将 Html 页面挂载到 Gin 的路由中,通过访问接口即可展现 Html 页面
- 通过运行单独的可执行(二进制)程序,无需加载额外的目录或文件,即可实现上述目标
所使用的库
- github.com/gin-gonic/gin
- embed(Go 的官方库)
指定目录挂载
- 和 r.GET() 等方法类似,只需要调用 r.Static() 方法,分别传入接口的相对路径(string)和文件目录(string),即可在访问该接口的时候展示传入的文件路径下的 Html 页面
- 如多页面的前端项目,可以使用 r.StaticFile() 方法,在第二个参数处传入文件路径即可
// 这里使用现有路由或新建的路由
r := gin.Default()
r.Static("/web1", "./web/dist")
r.StaticFile("/web2", "./web/dist/index.html")
将页面文件编译进可执行(二进制)文件
- Go 官方提供了一个库—— embed,它可以将指定的静态文件打包到编译后的文件内
- 本文只介绍结合 Gin 的调用方式,如需了解更多有关 embed 的知识,可以移步至 TODO: Go embed
// 下面这行注释是必要的,它指定了静态文件的目录或路径
//go:embed "web"
var htmlFiles embed.FS
func setupRouter() *gin.Engine {
r := gin.Default()
// 由于我们指定的是一个目录,所以在这里需要使用 fs.Sub()方法
// 进入目录内部,再传给路由
hf, _ := fs.Sub(htmlFiles, "web")
r.StaticFS("/web", http.FS(hf))
return r
}
go build .
# Linux
./xxx
# Windows
./xxx.exe
- 这时无论我们将二进制文件更换到什么目录,都不会依赖项目根目录下的 web 文件夹,即可通过访问 Gin 路由暴露的接口访问 Html 页面了