golang项目学习第一天

18 阅读1分钟

1.声明变量类型接收请求参数,然后绑定参数到结构体中c.ShouldBind(&ps)

func GetMaterialCard(c *gin.Context) {
  // -   声明一个 ResourceFilter 类型的变量,用于接收HTTP请求参数
	var ps pto.ResourceFilter
        // -   c.ShouldBind(&ps): 将HTTP请求中的参数自动绑定到 ps 结构体中
	if err := c.ShouldBind(&ps); err != nil {
		util.RspErr(c, def.ParamErrMsg)
		return
	}
}

2. gin.H的了解

// gin.H是map[string]interface{} 的类型别名
util.RspData(c, gin.H{
        "split": map[string]interface{}{
                "page":  ps.PageNum,
                "size":  ps.ResNum,
                "total": 0,
        },
        "list": []struct{}{},
})

3. 创建空的指针切片,用于存储最终的结果数据

cardList := make([]*MaterialCard, 0)

image.png 4. 数据转换循环

for _, v := range list {
    item := new(MaterialCard)
    err = json.Unmarshal([]byte(v.Info), item)
    if err != nil {
        util.LogrusBiz().WithFields(logrus.Fields{"id": v.ID, "info": v.Info, "err": err}).Error("UnmarshalErr")
        return nil, 0, err
    }
    // 设置备注信息
    item.Remark = resMap[v.ID].Remark
    // 检查是否满足筛选条件
    if isMaterialCardSatisfied(ps, item) {
        // 添加到结果列表
        cardList = append(cardList, item)
    }
}
  • for _, v := range list: 遍历基础数据列表
  • item := new(MaterialCard): 创建新的 MaterialCard 实例
  • json.Unmarshal([]byte(v.Info), item):
    • 这是将 JSON 字符串 v.Info 解析为 MaterialCard 结构体
    • 这是数据库将存储的 JSON 格式数据转换为 GO 结构体
  • 错误处理,如果JSON解析失败,记录错误日志并返回