lab/note/资源/编程/Golang/常用第三方库.md
张育新 be711334fb docs(note): 添加笔记目录及 gitignore 规则
- 新增 note 目录包含 AI、SQL、Golang、网络等多领域学习笔记
- 更新 .gitignore 添加 note/assets/ 和 note/项目/ 忽略规则
2026-07-10 09:24:40 +08:00

2.7 KiB
Raw Blame History

validator

GitHub地址

包验证器,可以用于验证参数是否符合规则,比如下方的比较验证,还有其他可以查看网址的详细介绍 go-zero自带的有校验器可以使用

Tag Description
eq Equals
gt Greater than
gte Greater than or equal
lt Less Than
lte Less Than or Equal
ne Not Equal

goverter

GitHub地址

类型转换器,可以用于类型的转换,比如下面的代码

func (l *CreatePopupLogic) CreatePopup(in *backgroundrpcmodel.ResPopup) (*backgroundrpcmodel.ResResult, error) {
    _, err := l.svcCtx.PopupModel.Insert(l.ctx, u.Convert.SysPopupR2S(in.Info))
    if err != nil {
       return nil, rerr.NewFromSQL(err)
    }
    return &backgroundrpcmodel.ResResult{
       Result: true,
    }, nil
}

使用

goverter gen .

asynq

GitHub网址

  • 入队流程

    payload := &jobtype.xxxPayload{}
    payloadByte, err := jsoniter.Marshal(payload)
    if err != nil {
    	logt.Error("xxx jsoniter.Marshal err:", err)
    	return nil, zerr.New(rescode.DataFormatConversionError)
    }
    	_, err = l.svcCtx.AsynqClient.Enqueue(asynq.NewTask(jobtype.xxx, payloadBytes, asynq.Queue(consts.QueueLow)))
    if err != nil {
    	logt.Error("xxx enqueue err:", err)
    	return nil, zerr.New(rescode.EnqueueErr)
    }
    
  • 自行定义了队列优先级,在入队的时候可以加参数进行选择

    consts.QueueCritical: 6,
    consts.QueueDefault:  3,
    consts.QueueLow:      1,
    
  • 处理前流程(反序列化,获取数据)

    var payload jobtype.xxx
    err := json.Unmarshal(task.Payload(), &payload)
    if err != nil {
        logt.Error("xxx unmarshal payload err:", err)
        return zerr.New(rescode.DataFormatConversionError)
    }
    

gorm

官网文档

使用gorm + sqlx但是复用sql连接

func NewServiceContext(c config.Config) *ServiceContext {
    logx.Infof("Cache config: %+v", c.CacheRedis)

    gormDB, err := gorm.Open(postgres.Open(c.Database.DataSource), &gorm.Config{})
    if err != nil {
       msg := fmt.Sprintf("连接数据库失败 %s ", err.Error())
       logx.Error(msg)
       panic(msg)
    }
    sqlDB, err := gormDB.DB()
    if err != nil {
       msg := fmt.Sprintf("获取底层连接失败: %s", err.Error())
       logx.Error(msg)
       panic(msg)
    }
    sqlxConn := sqlx.NewSqlConnFromDB(sqlDB)
    return &ServiceContext{
       Config:        c,
       UserAuthModel: models.NewUserAuthModel(sqlxConn, c.CacheRedis, gormDB),
    }
}