此结构将值传递给模板
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)
}
获取了所有结果,但每件事都重复了
答案 0 :(得分: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>
我相信这会导致mysql查询返回的每行运行一个<p> {{.Mess}} {{.Name}} </p>
。
我实际上没有测试过这段代码,所以它可能有错误。