You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用template.ParseFS解析embed.FS模板报错,求解决方法

Go模板解析:解决template: pattern matches no files: **/*.html错误

核心问题分析

你遇到的错误是因为embed语句的路径模式和ParseFS的匹配模式不匹配:

  • 用//go:embed internal/web/views/*嵌入时,文件在FS中的路径是无目录前缀的直接文件名(如index.html),而非带完整目录的路径;
  • 而**/*.html是递归匹配带子目录的路径,自然匹配不到嵌入的文件。

两种可行解决方案

方案1:调整embed语句以包含完整目录结构

如果需要保留**/*.html的递归匹配模式,修改embed语句为包含目录本身,这样嵌入的文件会保留完整路径前缀:

//go:embed internal/web/views
var viewsFS embed.FS

然后调用ParseFS时使用完整的匹配路径:

tmpl, err := template.ParseFS(viewsFS, "internal/web/views/**/*.html")

方案2:修改ParseFS的匹配模式适配当前嵌入路径

如果不想改动embed语句,保持//go:embed internal/web/views/*,则嵌入的文件都是无目录前缀的直接文件,直接用*.html匹配所有HTML文件:

tmpl, err := template.ParseFS(viewsFS, "*.html")

如果目录下有子目录需要递归嵌入,先把embed语句改成递归模式:

//go:embed internal/web/views/**
var viewsFS embed.FS

再用**/*.html匹配所有层级的HTML文件即可。

额外注意事项

  • 确认embed路径是相对于当前源文件的正确相对路径,比如源文件在项目根目录的cmd/main.go,internal/web/views就是正确路径;若源文件在internal/web下,路径应改为views/*;
  • 确保internal/web/views目录下确实存在.html文件,无文件名拼写错误;
  • 你的Go版本需在1.16及以上(embed特性从Go 1.16开始支持);
  • 所有带{{define}}的模板文件,只要被成功匹配解析,会自动合并到同一个template.Template结构体中。

内容的提问来源于stack exchange,提问作者otaxhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 13:47:26