英文:
Golang template can't access file in embedFS
问题
我的golang代码结构如下:
├── embeded.go
├── go.mod
├── json
│ └── file
└── main.go
这是我的embeded.go代码:
package main
import "embed"
//go:embed json/*
var templatesFS embed.FS
func TemplatesFS() embed.FS {
return templatesFS
}
现在在我的main.go中,我无法访问json目录中的文件:
package main
import (
"fmt"
"log"
"os"
"text/template"
)
func main() {
tmpl := template.Must(
template.New("json/file").
ParseFS(TemplatesFS(), "json/file"))
if err := tmpl.Execute(os.Stdout, "config"); err != nil {
log.Fatal(err)
}
}
当我运行上述代码时,我得到错误信息template: json/file: "json/file" is an incomplete or empty template
。
但是我可以像这样访问file
:
file, err := TemplatesFS().ReadFile("json/file")
那么为什么我无法在template.Execute中访问它呢?
我该如何解决这个问题?
英文:
my golang code arch is as bellow:
├── embeded.go
├── go.mod
├── json
│   └── file
└── main.go
and this is my embede.go code:
package main
import "embed"
//go:embed json/*
var templatesFS embed.FS
func TemplatesFS() embed.FS {
return templatesFS
}
now in my main.go I can't access file in json directory:
package main
import (
"fmt"
"log"
"os"
"text/template"
)
func main() {
tmpl := template.Must(
template.New("json/file").
ParseFS(TemplatesFS(), "json/file"))
if err := tmpl.Execute(os.Stdout, "config"); err != nil {
log.Fatal(err)
}
}
when I run above code I got error template: json/file: "json/file" is an incomplete or empty template
but I can access the file
like this:
file, err := TemplatesFS().ReadFile("json/file")
so why I can't access it in templte.execute ?
How Can I Solve It ?
答案1
得分: 2
模板解析器成功从嵌入的文件系统中读取了一个模板。
Execute方法报告模板tmpl
不完整。变量tmpl
被设置为通过调用New创建的模板。模板不完整是因为应用程序没有解析带有模板名称json/file
的模板。
ParseFS使用文件的基本名称来命名模板。修复方法是在调用New时使用文件的基本名称。
tmpl := template.Must(
template.New("file").ParseFS(TemplatesFS(), "json/file"))
英文:
The template parser successfully read a template from the embedded file system.
The Execute method reports that the template tmpl
is incomplete. The variable tmpl
is set to the template created by the call to New. The template is incomplete because the application did not parse a template with the template's name, json/file
.
ParseFS names templates using the file's base name. Fix by using using the file's base name in the call to New.
tmpl := template.Must(
template.New("file").ParseFS(TemplatesFS(), "json/file"))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论