template.ParseFiles的问题

时间:2016-03-29 02:55:24

标签: go

我有以下http.Handle函数(简化):

func loginHandler(w http.ResponseWriter, r *http.Request) {

        cwd, _ := os.Getwd()
        t, err := template.ParseFiles(filepath.Join(cwd, "./views/login.html"))

        if err != nil {
            fmt.Fprintf(w, "503 - Error")
            fmt.Println(err)
        } else {
            t.Execute(w, nil)
        }

}

在使用go build main.go时它按预期工作,但是 - 在运行go install后,我收到一个无法找到文件的错误(因为它现在编译为/bin/<appname>(没有视图文件夹的地方)。除了将视图文件夹添加到/bin目录或硬编码路径之外,如何让template.ParseFiles()找到正确的路径?

是否有一些标准方法可以包含用于编制程序的“静态”资源?

1 个答案:

答案 0 :(得分:1)

没有标准方法为编译程序包含静态资源;但是one通用约定是将配置存储在环境变量中。

例如,在运行应用程序时,将预期的环境变量放在环境中:

$> TEMPLATE_VIEWS=/var/local/app/views myapp

在您的代码中,您会找到文件夹:

func loginHandler(w http.ResponseWriter, r *http.Request) {
    t, err := template.ParseFiles(filepath.Join(os.Getenv("TEMPLATE_VIEWS"), "login.html"))
    if err != nil {
        fmt.Fprintf(w, "503 - Error")
        fmt.Println(err)
    } else {
        t.Execute(w, nil)
    }
}