我在学习golang web开发的过程中,我正在尝试一个简单的示例,在使用golang模板呈现的网页上显示mysql数据库中的表。下面是我的代码片段,它不起作用。表呈现失败,模板的range函数不起作用
服务器.go
package main
import (
"fmt"
"net/http"
_ "github.com/go-sql-driver/mysql"
"database/sql"
"os"
"html/template"
)
type Employee struct {
fname, sname, dname, email string
}
func helloWorld(w http.ResponseWriter, r *http.Request){
name, err := os.Hostname()
checkErr(err)
fmt.Fprintf(w, "HOSTNAME : %s\n", name)
}
func dbConnect() (db *sql.DB) {
dbDriver := "mysql"
dbUser := "root"
dbPass := "password"
dbHost := "mysql.go"
dbPort := "3306"
dbName := "company"
db, err := sql.Open(dbDriver, dbUser +":"+ dbPass +"@tcp("+ dbHost +":"+ dbPort +")/"+ dbName +"?charset=utf8")
checkErr(err)
return db
}
func dbSelect() []Employee{
db := dbConnect()
rows, err := db.Query("select * from employees")
checkErr(err)
employee := Employee{}
employees := []Employee{}
for rows.Next() {
var first_name, last_name, department, email string
err = rows.Scan(&first_name, &last_name, &department, &email)
checkErr(err)
employee.fname = first_name
employee.sname = last_name
employee.dname = department
employee.email = email
employees = append(employees, employee)
}
defer db.Close()
return employees
}
var tmpl = template.Must(template.ParseFiles("layout.html"))
//var tmpl = template.Must(template.ParseGlob("layout.html"))
func dbTableHtml(w http.ResponseWriter, r *http.Request){
table := dbSelect()
tmpl.ExecuteTemplate(w, "Index", table)
}
func dbTable(w http.ResponseWriter, r *http.Request){
table := dbSelect()
for i := range(table) {
emp := table[i]
fmt.Fprintf(w,"YESS|%12s|%12s|%12s|%20s|\n" ,emp.fname ,emp.sname ,emp.dname ,emp.email)
}
}
func main() {
http.HandleFunc("/", helloWorld)
http.HandleFunc("/view", dbTableHtml)
http.HandleFunc("/raw", dbTable)
http.ListenAndServe(":8080", nil)
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
布局.html
{{ define "Index" }}
<!DOCTYPE html>
<html lang="en-US">
<head>
<title>Maithanam Website</title>
<meta charset="UTF-8" />
</head>
<body>
<h1>Maithanammm website for mysql</h1>
{{ $length := len . }}
<h3>Length {{$length}}</h3>
<table border="1">
<tr>
<td>FirstName</td>
<td>SecondName</td>
<td>Department</td>
<td>Email</td>
</tr>
{{ range . }}
<tr>
<td>{{ .fname }}</td>
<td> {{ .sname }} </td>
<td>{{ .dname }} </td>
<td>{{ .email }} </td>
</tr>
{{ end }}
</table>
</body>
</html>
{{ end }}
此处输入图像描述
1条答案
按热度按时间zf9nrax11#
你有两个问题:
你打电话时没有检查错误
ExecuteTemplate
.您的模板使用的是未导出的字段,处理好第一个问题会告诉您这一点。
对于第一个问题:
对于第二个问题,请更改
struct
要导出字段:然后更改模板以使用新的字段名。