Golang模板无法访问embedFS中文件的问题及解决方法
问题原因与解决方法
错误原因
text/template.ParseFS会将文件内容当作Go模板语法解析,只有当文件中包含{{...}}格式的模板动作时,才会被视为有效模板。如果你的json/file是普通文本(比如纯JSON),模板引擎会判定它是“不完整或空模板”——因为没有可执行的模板逻辑。而ReadFile仅读取原始字节,不做语法校验,所以能正常获取内容。
解决方法
场景1:仅需输出文件原始内容
直接跳过模板包,用ReadFile读取后输出:
func main() { content, err := TemplatesFS().ReadFile("json/file") if err != nil { log.Fatal(err) } fmt.Fprint(os.Stdout, string(content)) }
场景2:确实需要使用模板引擎
如果文件包含Go模板语法,先确认语法无错误;如果是要将纯文本作为模板内容,可先读取文件再手动解析:
func main() { content, err := TemplatesFS().ReadFile("json/file") if err != nil { log.Fatal(err) } // 将读取到的内容作为模板源解析 tmpl := template.Must(template.New("json/file").Parse(string(content))) if err := tmpl.Execute(os.Stdout, "config"); err != nil { log.Fatal(err) } }
如果你的目标是渲染模板(文件中有{{...}}语法),只需确保文件内容符合Go模板规范即可,ParseFS就能正常工作。
内容的提问来源于stack exchange,提问作者Mohammad Abdollahzadeh
相关产品推荐
相关产品推荐

