Go 转到Template.ParseFiles和filepath.Join

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 我正

我试图从一个目录加载一个html文件,我得到了错误“打开模板:没有这样的文件或目录”

我的目录结构如下

/用户/{username}/go/src/app 梅因,加油

/用户/{username}/go/src/app/templates mytemplate.html

错误来自下面的行

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目录。将模板复制到该应用目录下