侧边栏壁纸
  • 累计撰写 14 篇文章
  • 累计收到 0 条评论

GO语言及gin框架中踩坑总结

admin
2021-11-22 / 0 评论 / 222 阅读 / 正在检测是否收录...

关于前后端传参问题


  • 对于前端传的参数,应创建对应的结构体进行解析,不建议直接使用gorm所对应的结构体
  • router.go为gin框架中路由配置文件,一般在url路径中传入id为path传参方式,也可使用query方式(id=xx)进行参数的传递
  • 使用binding字段配合c.bind可进行传入参数的校验,但由于golang中bool的默认值为false,gorm无法进行存储,所以bool类型的值最好不要加binding

关于常量的定义


  • 代码中尽量使用const在代码的开头进行常量的定义,避免使用魔法值,最好使用注释标明常量的含义

关于批量删除


  • 批量删除一般采用SQL语句的in来操作,通过对传入的id进行处理后,可利用middleware.DB.Model(&model.ReportTask{}).Where("id in (?)", ids).Find(&m)语句进行批量删除

关于定时任务


  • 项目中的定时任务实现主要依赖于Linux系统中的Cron表达式,通过chronos组件来实现Cron表达式的生成与调度
  • 定时任务生成及运行原理
  • 前端传入定时任务相关信息,包括定时任务执行间隔,开始执行时间等参数
  • 向pg中插入定时任务记录的同时,调用chronos的接口进行定时任务的创建
  • 当定时任务到达预定执行时间时,chronos会根据pg中存入的url地址调用对应模块暴露的exec接口,进行任务的执行

关于gorm的使用

  • 使用gorm对数据库表进行基本CRUD操作时,需注意顺序问题,例如middleware.DB.Where("id = (?)", task.ID).Delete(&m)中delete操作需要在where条件之后,否则where条件不会生效

关于go语法

p, err := paramsDealWith(c)
    if err != nil {
        errno.Abort(errno.ErrBind, err, c)
        return
    }
if p, err := paramsDealWith(c); err != nil {
        errno.Abort(errno.ErrBind, err, c)
        return
    }
  • 如上图所示,Go语言中可以将图1中赋值与判断合为一个整体,从而简化语法,提升代码可读性
0

评论

博主关闭了当前页面的评论