### validator [GitHub地址](github.com/go-playground/validator) 包验证器,可以用于验证参数是否符合规则,比如下方的比较验证,还有其他可以查看网址的详细介绍 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地址](https://github.com/jmattheis/goverter) 类型转换器,可以用于类型的转换,比如下面的代码 ```go 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网址](https://github.com/hibiken/asynq) - 入队流程 ```go 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, ``` - 处理前流程(反序列化,获取数据) ```go 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 [官网文档](https://gorm.io/zh_CN/docs/) **使用gorm + sqlx,但是复用sql连接** ```go 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), } } ```