运行由构建

时间:2018-01-05 14:25:26

标签: go

我有一个简单的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

时,它完美运行

1 个答案:

答案 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?