Go 转到Template.ParseFiles和filepath.Join
我试图从一个目录加载一个html文件,我得到了错误“打开模板:没有这样的文件或目录” 我的目录结构如下 /用户/{username}/go/src/app 梅因,加油 /用户/{username}/go/src/app/templates mytemplate.html 错误来自下面的行Go 转到Template.ParseFiles和filepath.Join,go,Go,我试图从一个目录加载一个html文件,我得到了错误“打开模板:没有这样的文件或目录” 我的目录结构如下 /用户/{username}/go/src/app 梅因,加油 /用户/{username}/go/src/app/templates mytemplate.html 错误来自下面的行 template.Must(template.ParseFiles(filepath.Join("templates", "mytemplate.html"))) 我是新手,只是想对语法有所了解 编辑1 我正
template.Must(template.ParseFiles(filepath.Join("templates", "mytemplate.html")))
我是新手,只是想对语法有所了解
编辑1
我正在使用“GoBuild”命令构建项目,并在上面显示的“app”目录中执行它
$GOROOT=/usr/local/go
$GOPATH=/Users/{username}/go
我还更新了目录结构以集成$GOPATH
template.Must(template.New("mytemplate.html").ParseFiles("templates/mytemplate.html"))
试试这个
template.Must(template.New("mytemplate.html").ParseFiles("templates/mytemplate.html"))
检查程序在运行时使用的工作目录
dir, _ := os.Getwd()
fmt.Println(dir)
然后您可以使用它来获得模板的正确路径
template.Must(template.ParseFiles(filepath.Join(dir,“templates”,“mytemplate.html”))
对于生产使用,您可以从配置文件或环境中获取dir
的val
参考:
编辑:当您运行程序时,请使用终端中的
cd
确保您位于正确的目录中检查程序在运行时的工作目录
dir, _ := os.Getwd()
fmt.Println(dir)
然后您可以使用它来获得模板的正确路径
template.Must(template.ParseFiles(filepath.Join(dir,“templates”,“mytemplate.html”))
对于生产使用,您可以从配置文件或环境中获取dir
的val
参考:
编辑:当您运行程序时,请使用终端中的
cd
确保您位于正确的目录中您从哪里运行程序?有关Go中相对路径的信息,请参见此:templates文件夹实际上位于app目录下。我更新了问题以澄清问题。您是否对可执行文件使用go-run
或go-install
?请记住,go install
将二进制文件放入$GOPATH/bin
文件夹。我使用的是go build,我能够放入解决问题的文件的绝对路径。然后使用filepath.Join()更改文件名和文件夹名。我的问题似乎与@HectorJ链接中的问题相同。您从哪里运行程序?有关Go中相对路径的信息,请参见此:templates文件夹实际上位于app目录下。我更新了问题以澄清问题。您是否对可执行文件使用go-run
或go-install
?请记住,go install
将二进制文件放入$GOPATH/bin
文件夹。我使用的是go build,我能够放入解决问题的文件的绝对路径。然后使用filepath.Join()更改文件名和文件夹名。我的问题似乎与@HectorJ链接中的问题相同。请编辑更多信息。“仅编码”和“尝试此项”答案是错误的,因为它们不包含可搜索的内容,并且没有解释为什么有人应该“尝试此项”。我尝试了此项,但收到了与原始帖子相同的错误。请使用更多信息进行编辑。“仅代码”和“尝试此”答案是错误的,因为它们不包含可搜索的内容,并且没有解释为什么有人应该“尝试此”。我尝试了此方法,但收到了与原始帖子相同的错误。我尝试了此方法,但无效。工作目录返回“/Users/{username}/templates/mytemplate.html”,实际位置是“/Users/{username}/go/src/{projectname}/templates/mytemplate.html”,因此根据上面的注释,您的工作目录是不正确的,您是如何运行程序的?使用“go build”然后在/Users/{username}中执行它/go/src/app directory.将模板复制到该app directory下我尝试了此操作,但无效。工作目录返回“/Users/{username}/templates/mytemplate.html”,实际位置是“/Users/{username}/go/src/{projectname}/templates/mytemplate.html”,因此根据上面的注释,您的工作目录是不正确的,您是如何运行程序的?使用“go build”然后在/Users/{username}中执行它/转到/src/app目录。将模板复制到该应用目录下