go使用gin从数据库查数据渲染到HTML页面

本文记录了使用Go语言和Gin框架从数据库查询数据,并将结果显示在HTML页面上的过程。文章中提到了User结构体的定义、数据库连接和查询操作,以及HTML页面的展示。在实现过程中,需要注意结构体字段首字母大写以避免渲染错误。
摘要由CSDN通过智能技术生成

最近在看go语言,在将数据从数据库查出来的时候一直都无法分开渲染到html页面,查了很多才搞明白,记录一下。

首先是go代码

定义一个User的结构体

//里面的元素一定要大写,否则输出带html页面的时候会找不到

type User struct {
	Id      int    `json:"Id"`
	Name    string `json:"Name"`
	Age     int    `json:"Age"`
	Addtime string `json:"Addtime`
}

里面的元素一定要大写 不然在渲染html的时候会报以下错误,提示找不到id

然后连接数据库

connStr := "root:root@tcp(127.0.0.1)/onego?loc=Local" //这个loc=Local是时时间等于本地时间,不然时间不对的话,添加的时候添加时间是错的
db, err := sql.Open("mysql", connStr)
if err != nil {
	log.Fatal(err.Error)
	return
}

查询数据

rows, errq := db.Query("select id,name,age,addtime from go_users")
if errq != nil {
	log.Fatal(err
  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,我可以给您提供一个简单的实现示例供参考,具体代码如下: ```go package main import ( "encoding/json" "fmt" "net/http" "github.com/gin-gonic/gin" "github.com/go-redis/redis" ) type Order struct { ID string `json:"id"` Status string `json:"status"` DetailURL string `json:"detail_url"` } var redisClient *redis.Client func init() { redisClient = redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password set DB: 0, // use default DB }) } func main() { r := gin.Default() r.GET("/orders/:id", getOrder) r.Run(":8080") } func getOrder(c *gin.Context) { orderID := c.Param("id") // check if order is in redis cache cacheResult, err := redisClient.Get(orderID).Result() if err == nil { var order Order err := json.Unmarshal([]byte(cacheResult), &order) if err != nil { fmt.Println("error unmarshalling order from cache: ", err) } else { c.JSON(http.StatusOK, order) return } } // make request to third-party logistics API resp, err := http.Get(fmt.Sprintf("https://logisticsapi.com/orders/%s", orderID)) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "error making request to logistics API"}) return } defer resp.Body.Close() if resp.StatusCode == http.StatusNotFound { c.JSON(http.StatusNotFound, gin.H{"error": "order not found"}) return } if resp.StatusCode != http.StatusOK { c.JSON(http.StatusInternalServerError, gin.H{"error": "error fetching order details from logistics API"}) return } var order Order err = json.NewDecoder(resp.Body).Decode(&order) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "error parsing order details"}) return } // cache order in redis if it has been delivered if order.Status == "Delivered" { orderJSON, _ := json.Marshal(order) err = redisClient.Set(orderID, string(orderJSON), 0).Err() if err != nil { fmt.Println("error caching order in redis: ", err) } } c.JSON(http.StatusOK, order) } ``` 在上面的代码中,我们使用Gin框架来实现了一个简单的API接口,接收订单号作为参数,然后从缓存或第三方物流API中获取订单详情信息,最后将结果返回给客户端。 在 `init()` 函数中,我们初始化了一个Redis客户端实例,用于连接Redis数据库。 在 `getOrder()` 函数中,我们首先检订单是否已经存在于Redis缓存中,如果存在则直接从缓存中获取订单信息并返回给客户端;否则我们将会向第三方物流API发起请求,获取最新的订单详情信息,并根据订单状态将其缓存到Redis中。 需要注意的是,为了保证缓存的一致性,我们需要及时更新Redis缓存中的订单信息,可以在订单状态变更时触发更新操作。 希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值