func init() { router = gin.Default() //使用嵌入式文件系统启动静态文件服务 subStatic, _ := fs.Sub(staticFS, "static") router.StaticFS("/static", http.FS(subStatic)) //使用嵌入式文件系统加载模板 router.HTMLRender = loadTemplates() } func main() { router.GET("/home/index", func(c *gin.Context) { c.HTML(http.StatusOK, "home/index.html", gin.H{}) }) } //自定义模板引擎实现多模板功能,模板内容从嵌入式文件系统提取 //依赖github.com/gin-contrib/multitemplate func loadTemplates() multitemplate.Renderer { r := multitemplate.NewRenderer() var fragments string fragmentFiles, _ := templateFS.ReadDir("template/fragment") for _, fragmentFile := range fragmentFiles { fragmentFilePath := path.Join("template/fragment", fragmentFile.Name()) fragment, _ := templateFS.ReadFile(fragmentFilePath) fragments += string(fragment) } contentDirs, _ := templateFS.ReadDir("template/content") for _, contentDir := range contentDirs { contentDirPath := path.Join("template/content", contentDir.Name()) contentFiles, _ := templateFS.ReadDir(contentDirPath) for _, contentFile := range contentFiles { contentFilePath := path.Join(contentDirPath, contentFile.Name()) tplName := strings.TrimPrefix(contentFilePath, "template/content/") content, _ := templateFS.ReadFile(contentFilePath) r.AddFromString(tplName, fragments+string(content)) } } return r }