我有一个简单的Go应用程序,它有一些模板文件,我在其中呈现一些文本。在我使用Go构建我的二进制文件之后,我尝试运行该文件并收到错误:
恐慌:html / template:pattern匹配没有文件:
public/*.html
我正在使用Echo框架并按照他们的步骤添加模板渲染。
以下是我的main.go文件中的代码
// TemplateRenderer is a custom html/template renderer for Echo framework
type TemplateRenderer struct {
templates *template.Template
}
// Render renders a template document
func (t *TemplateRenderer) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
return t.templates.ExecuteTemplate(w, name, data)
}
func main() {
// Create a new instance of Echo
e := echo.New()
e.Use(middleware.Logger())
e.Use(middleware.Recover())
renderer := &TemplateRenderer{
templates: template.Must(template.ParseGlob("public/*.html")),
}
e.Renderer = renderer
e.GET("/", func(context echo.Context) error {
return context.Render(http.StatusOK, "index.html", api.FetchCoinList())
})
}
我是否需要做一些事情来将模板打包到二进制文件中?当我运行 go run main.go
时,它完美运行答案 0 :(得分:1)
我是否需要做一些事情来将模板打包到二进制文件中?
是的,当您使用go run main.go
运行它们时,将它们 avialable 放在它们所在的相同(相对)文件夹中。
例如,如果public
文件夹中包含main.go
旁边的模板,请确保"复制"可执行二进制文件旁边的public
文件夹。
阅读此问题+答案以获取更多选项:how to reference a relative file from code and tests
通常,您应该提供定义从哪里获取静态资产和文件的方法。应用程序可能有一个默认的位置来查找它们,但应该很容易更改此设置(例如,通过命令行标记,通过环境变量或通过配置文件)。
另一种选择是在可执行二进制文件中包含静态文件。查看此问题如何执行此操作:What's the best way to bundle static resources in a Go program?