如何将Go语言变量与数据库结果集渲染到HTML页面?
我来帮你把这段代码整理规范,还补全了db.go里缺失的部分,这样你就能顺利把Go变量和数据库查询结果渲染到HTML页面啦~
场景说明
你需要实现的是:在Go服务中读取MySQL数据库数据,同时定义一个自定义变量,一起渲染到Home.html页面中,工作区包含Home.html和db.go两个文件。
Home.HTML 代码
<div id="Golang"> <p>My Name is : <i>{{.myName}}</i></p> </div> <div id="Golang"> <p>Some Random Database Test: <br>{{.Country}} {{.City}} </p> </div>
补全后的 db.Go 代码
package main import ( "database/sql" "fmt" "html/template" "log" "net/http" _ "github.com/go-sql-driver/mysql" ) // 定义结构体对应数据库表字段,用sql.NullString处理可能为NULL的字段 type world struct { Country sql.NullString City sql.NullString } func main() { // 注册路由,访问根路径时触发handler http.HandleFunc("/", homeHandler) log.Println("Server starting on :8080...") log.Fatal(http.ListenAndServe(":8080", nil)) } func homeHandler(w http.ResponseWriter, r *http.Request) { // 1. 连接MySQL数据库,替换成你的数据库信息 db, err := sql.Open("mysql", "username:password@tcp(127.0.0.1:3306)/your_database_name") if err != nil { log.Fatalf("Failed to connect to database: %v", err) } defer db.Close() // 验证连接是否有效 if err := db.Ping(); err != nil { log.Fatalf("Database ping failed: %v", err) } // 2. 查询数据库数据,这里示例查询一条记录,你可以根据实际表结构调整SQL var result world sqlQuery := "SELECT country, city FROM your_table_name LIMIT 1" err = db.QueryRow(sqlQuery).Scan(&result.Country, &result.City) if err != nil { log.Printf("Query failed: %v", err) http.Error(w, "Failed to fetch data", http.StatusInternalServerError) return } // 3. 准备要传递给模板的数据 data := map[string]interface{}{ "myName": "Sam", // 这里可以替换成你的变量值 "Country": result.Country.String, // 取出NullString的实际值 "City": result.City.String, } // 4. 解析并渲染HTML模板 tmpl, err := template.ParseFiles("Home.html") if err != nil { log.Printf("Failed to parse template: %v", err) http.Error(w, "Failed to load template", http.StatusInternalServerError) return } if err := tmpl.Execute(w, data); err != nil { log.Printf("Failed to render template: %v", err) http.Error(w, "Failed to render page", http.StatusInternalServerError) } }
关键注意事项
- 记得把代码里的
username、password、your_database_name、your_table_name替换成你实际的数据库信息 - 使用
sql.NullString是为了处理数据库中可能存在的NULL值,避免直接用string类型导致空指针 panic - 模板渲染时,我们通过map传递数据,模板里的
{{.myName}}、{{.Country}}会对应map里的键 - 要确保已经安装了MySQL驱动:执行
go get github.com/go-sql-driver/mysql
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

