1

Martini の例から取られた多くのコードですが、これは Echo フレームワークを使用しています。

Martini では動作しますが、Echo では動作しません。

server.go:

package main

import (
    "database/sql"
    "github.com/labstack/echo"
    _ "github.com/lib/pq"
    "html/template"
    "io"
    "log"
    "net/http"
)

type Book struct {
    Title, Author, Description string
}

type (
    Template struct {
        templates *template.Template
    }
)

func (t *Template) Render(w io.Writer, name string, data interface{}) error {
    return t.templates.ExecuteTemplate(w, name, data)
}

func main() {
    e := echo.New()

    db, err := sql.Open("postgres", "user=postgres password=apassword dbname=lesson4 sslmode=disable")
    if err != nil {
        log.Fatal(err)
    }

    t := &Template{
        templates: template.Must(template.ParseFiles("public/views/testhere.html")),
    }
    e.Renderer(t)

    e.Get("/post/:idnumber", func(c *echo.Context) {

        rows, err := db.Query("SELECT title, author, description FROM books WHERE id=$1", c.Param("idnumber"))
        if err != nil {
            log.Fatal(err)
        }

        books := []Book{}

        for rows.Next() {
            b := Book{}
            err := rows.Scan(&b.Title, &b.Author, &b.Description)

            if err != nil {
                log.Fatal(err)
            }

            books = append(books, b)
        }

        c.Render(http.StatusOK, "onlytestingtpl", books)
    })

    e.Run(":4444")
}

public/views/testhere.html:

{{define "onlytestingtpl"}}Book title is {{.Title}}. Written by {{.Author}}. The book is about {{.Description}}.{{end}}

エラー メッセージがなく、このフレームワークの SQL ドキュメントがないため、わかりません。実行すると、次のようになります。

Book title is

(変数は値を出力しません)

4

1 に答える 1

1

コメントで述べたように、構造体のスライスを持つ構造体を取るテンプレートを実行しないでください。{{range}}テンプレートで使用するか、実行します

c.Render(http.StatusOK, "onlytestingtpl", books[0])
于 2015-05-01T08:43:05.517 に答える