You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:12:37