4

テンプレートに値を渡すこの構造体

type Entry struct {
    Name, Mes string
}

処理するこの関数HandleFunc("/", mysqlWithTempl)

func mysqlWithTempl(w http.ResponseWriter, r *http.Request) {

    // Open database
    con, err := sql.Open("mymysql", dbName+"/"+dbUserName+"/"+dbPassword)
    if err != nil {
        panic(err)
    }

    // Close database 
    defer con.Close()

    //query
    rows, err := con.Query("select name, message from entry")

    tRes := Entry{}

    //fetch result
    for rows.Next() {
        var name, message string
        rows.Scan(&name, &message)
        tRes.Name = name
        tRes.Mes = message
    }
    index.Execute(w, tRes)
}

そしてこのテンプレ

<!DOCTYPE html>
<html>
    <head>
        <title> Test </title>
    </head>
    <body>
        <section id="contents">
        <p> {{.Mes}} {{.Name}} </p>
       </section>
    </body>
</html>

私の質問は、mysql からより多くの値を取得してテンプレートに渡す方法です。

試してみると

 for rows.Next() {
            var name, message string
            rows.Scan(&name, &message)
            tRes.Name = name
            tRes.Mes = message
index.Execute(w, tRes)
        }

すべての結果がフェッチされましたが、すべてが繰り返されました

4

1 に答える 1

5

複数の結果を表示する方法を尋ねているのではないでしょうか?

その場合、次のようにすべての行をスライスに蓄積します。

results := []Entry
for rows.Next() {
    var name, message string
    rows.Scan(&name, &message)
    tRes.Name = name
    tRes.Mes = message
    results = append(results, tRes)
}
index.Execute(w, results)

次に、テンプレートは次のように変更されます。

<!DOCTYPE html>
<html>
    <head>
        <title> Test </title>
    </head>
    <body>
        <section id="contents">
        {{range .}}
        <p> {{.Mes}} {{.Name}} </p>
        {{end}}
       </section>
    </body>
</html>

<p> {{.Mess}} {{.Name}} </p>これにより、mysqlクエリが返す行ごとに1つが実行されると思います。

ただし、このコードを実際にテストしていないため、エラーがある可能性があります。

于 2012-09-10T20:45:57.260 に答える