在 Golang 网站中使用模板显示 mysql 表
Posted
技术标签:
【中文标题】在 Golang 网站中使用模板显示 mysql 表【英文标题】:Display mysql table using template in Golang website 【发布时间】:2022-01-21 09:53:30 【问题描述】:我正在学习 GoLang Web 开发,我正在尝试在使用 Golang 模板呈现的网页上显示 mysql 数据库中的表的简单示例。 下面是我的代码的 sn-p,它不起作用。表格渲染失败,模板中的 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)
layout.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
网页 enter image description here
【问题讨论】:
员工字段名称必须为exported。 ExecuteTemplate 返回的错误是什么?错误返回值当前被忽略。 【参考方案1】:你有两个问题:
-
当您调用
ExecuteTemplate
时,您并未检查错误。
您的模板正在使用未导出的字段,处理您的第一个问题会告诉您这一点。
对于第一个问题:
err := tmpl.ExecuteTemplate(w, "Index", table)
if err != nil
// Do something with the error
对于第二个问题,将您的 struct
更改为导出字段:
type Employee struct
Fname, Sname, Dname, Email string
然后更改您的模板以使用新的字段名称。
【讨论】:
非常感谢......我从没想过即使是可变大小写也有一些价值......很高兴知道...... 您可能想再次运行Go Tour,导出名称的大小写非常快。以上是关于在 Golang 网站中使用模板显示 mysql 表的主要内容,如果未能解决你的问题,请参考以下文章