我有以下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()
找到正确的路径?
是否有一些标准方法可以包含用于编制程序的“静态”资源?
答案 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)
}
}