Как указать местоположение файла для `template.ParseFiles` в Go Language?

После того, как я посмотрел это видео, я сам попробую. Тем не менее, я получаю ошибку паники panic: open templates/index.html: The system cannot find the path specified. Сообщение Complete erroe выглядит следующим образом.

Hello, Go Web Development 1.3
panic: open templates/index.html: The system cannot find the path specified.

goroutine 1 [running]:
panic(0x789260, 0xc082054e40)
    F:/Go/src/runtime/panic.go:481 +0x3f4
html/template.Must(0x0, 0xe34538, 0xc082054e40, 0x0)
    F:/Go/src/html/template/template.go:340 +0x52
main.main()
    E:/Users/User/Desktop/codespace/go_workspace/src/go-for-web-dev/src/1.3_UsingTemplate.go:11 +0x20d

Я пробовал другую строку, как "templates/index.html", "index.html", "./template/index.html"... Также я пытаюсь скопировать всю папку шаблона в pkg, bin... но я получаю то же сообщение об ошибке.

Ниже приведена программа go (1.3_UsingTemplate.go).

package src

import (
    "fmt"
    "net/http"
    "html/template"
)

func main() {
    fmt.Println("Hello, Go Web Development 1.3")
    templates := template.Must(template.ParseFiles("templates/index.html"))  //This line should have some problem

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        if err := templates.ExecuteTemplate(w, "index.html", nil); err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
        }
    })

    fmt.Println(http.ListenAndServe(":8080",nil))
}

Файловая структура


Обновить

Чтобы решить эту проблему, мне нужно сначала изменить текущий рабочий каталог на папку, содержащую файл *.go. Затем выполните go run {filename.go}, Есть ли в GoClipse какой-либо параметр для Run Configurations для автоматического изменения текущего рабочего каталога на папку, содержащую файл *.go?

3 ответа

os.Getwd() может использоваться для возврата корневого рабочего каталога вашего проекта и последующего согласования с внутренним путем вашего файла шаблона:

d, err := os.Getwd()
if err != nil {
   log.Fatal(err)
}

tpl, err := template.ParseFiles(wd + "/templates/index.html")

Вы указали путь относительно текущего рабочего каталога. Этот каталог может не иметь никакого отношения к каталогу, содержащему исходный код.

Изменить каталог на E:/Users/User/Desktop/codespace/go_workspace/src/go-for-web-dev/src запустить вашу программу. Путь к шаблону относительно этого каталога.

Глядя на вашу структуру каталогов, я думаю, что у вас есть опечатка в вашем примере. Вы должны использовать

templates := template.Must(template.ParseFiles("templates/index.html")) 

вместо

 templates := template.Must(template.ParseFiles("template/index.html")) 

Обратите внимание на "S" в конце templates,

Если все еще не работает, вы должны использовать os.Getwd получить корневой путь, соответствующий текущему каталогу.

templates := template.Must(template.ParseFiles(os.Getwd("templates/index.html"))) 
Другие вопросы по тегам