Данные обработчика шаблонов не отображаются в Интернете - PullRequest
1 голос
/ 27 мая 2020

Ребята, я делаю книгу для создания ваших собственных приключений, в которой пользователь может выбирать события. Я беру данные истории из файла json. Я создал два файла с именами story. go и main. go, где story. go обрабатывает все функции, а main. go имеет только сервер. Посмотрите на следующие коды

story. go

package gyg

import (
    "encoding/json"
    "io"
    "net/http"
    "text/template"
)

var defaultHandlerTemplate = `
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Give Yourself Goosebumps</title>
</head>
<body>
    <h1>{{.Title}}</h1>
    {{range .Paragraphs}}
        <p>{{.}}</p>
    {{end}}
    <ul>
    {{range .Options}}
        <li><a href="/{{.Chapter}}"> {{.Text}} </a></li>
    {{end}}
    </ul>
</body>
</html>
`

var tpl *template.Template

type Story map[string]Chapter

type Chapter struct {
    Title      string   `json:"title"`
    Paragraphs []string `json:"story"`
    Options    []Option `json:"options"`
}
type Option struct {
    Text string `json:"text"`
    Arc  string `json:"arc"`
}

type handler struct {
    s Story
}

func init() {
    tpl = template.Must(template.New("").Parse("defaultHandlerTemplate"))
}

func JsonStory(r io.Reader) (Story, error) {
    d := json.NewDecoder(r)
    var story Story
    if err := d.Decode(&story); err != nil {
        return nil, err
    }
    return story, nil
}

func NewHandler(s Story) http.Handler {
    return handler{s}
}

func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    err := tpl.Execute(w, h.s["intro"])
    if err != nil {
        panic(err)
    }
}

main. go

package main

import (
    "flag"
    "fmt"
    "go-projects/gyg"
    "log"
    "net/http"
    "os"
)

func main() {
    filename := flag.String("file", "gopher.json", "the file with GYG story.")
    flag.Parse()

    f, err := os.Open(*filename)
    if err != nil {
        panic(err)
    }
    story, err := gyg.JsonStory(f)
    if err != nil {
        panic(err)
    }

    server := http.Server{
        Addr: "127.0.0.1:3000",
    }
    h := gyg.NewHandler(story)
    fmt.Printf("Startin the server on port %s\n", server.Addr)
    log.Fatal(http.ListenAndServe(server.Addr, h))
}

При запуске main. go сервер прослушивает на порту 3000, но при открытии порта 3000 в браузере отображается

defaultHandlerTemplate

...