Reputation: 43
This struct to pass value to template
type Entry struct {
Name, Mes string
}
This function to handle with 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)
}
and this template
<!DOCTYPE html>
<html>
<head>
<title> Test </title>
</head>
<body>
<section id="contents">
<p> {{.Mes}} {{.Name}} </p>
</section>
</body>
</html>
my ask how can fetch more value from mysql and pass it to template
When try
for rows.Next() {
var name, message string
rows.Scan(&name, &message)
tRes.Name = name
tRes.Mes = message
index.Execute(w, tRes)
}
all result fetched but every thing repeated
Upvotes: 4
Views: 2350
Reputation: 25237
I think you might be asking how to show multiple results?
If so then you want to accumulate all your rows into a slice like so:
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)
Then your template will change to look like this:
<!DOCTYPE html>
<html>
<head>
<title> Test </title>
</head>
<body>
<section id="contents">
{{range .}}
<p> {{.Mes}} {{.Name}} </p>
{{end}}
</section>
</body>
</html>
I believe this will cause one <p> {{.Mess}} {{.Name}} </p>
to be run per row that your mysql query returns.
I haven't actually tested this code though so it might have errors.
Upvotes: 5