201 lines
4.2 KiB
Markdown
201 lines
4.2 KiB
Markdown
|
||
|
||
### 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),
|
||
}
|
||
}
|
||
```
|
||
|
||
|
||
|
||
### excelize
|
||
|
||
读写Excel的Go库
|
||
|
||
[github](https://github.com/qax-os/excelize)
|
||
|
||
#### 创建工作簿
|
||
|
||
```go
|
||
f := excelize.NewFile()
|
||
defer func() {
|
||
if err := f.Close(); err != nil {
|
||
fmt.Println(err)
|
||
}
|
||
}()
|
||
// 创建一个新的Sheet,返回的index为该工作簿的索引
|
||
index, err := f.NewSheet("SheetName")
|
||
if err != nil {
|
||
return fmt.Errorf("创建Sheet失败: %w", err)
|
||
}
|
||
```
|
||
|
||
#### 打开文件
|
||
|
||
```go
|
||
f, err := excelize.OpenFile(filePath)
|
||
if err != nil {
|
||
return fmt.Errorf("打开 Excel失败: %w", err)
|
||
}
|
||
defer func() {
|
||
if err := f.Close(); err != nil {
|
||
fmt.Println(err)
|
||
}
|
||
}()
|
||
```
|
||
|
||
#### 写入cell值
|
||
|
||
```go
|
||
f.SetCellValue("SheetName", "B2", 100)
|
||
```
|
||
|
||
#### 设置工作簿默认活动工作表
|
||
|
||
```go
|
||
f.SetActiveSheet(index)
|
||
```
|
||
|
||
#### 创建或更新excel表
|
||
|
||
```go
|
||
if err := f.SaveAs("Book1.xlsx"); err != nil {
|
||
return fmt.Errorf("保存失败: %w", err)
|
||
}
|
||
```
|
||
|
||
#### 获取指定cell值
|
||
|
||
```go
|
||
cell, err := f.GetCellValue("Sheet1", "B2")
|
||
if err != nil {
|
||
return fmt.Errorf("读取cell失败: %w", err)
|
||
}
|
||
fmt.Println(cell)
|
||
```
|
||
|
||
#### 获取所有工作簿的cell值(二维数组)
|
||
|
||
```go
|
||
rows, err := f.GetRows("Sheet1")
|
||
if err != nil {
|
||
return fmt.Errorf("读取失败: %w", err)
|
||
}
|
||
for _, row := range rows {
|
||
for _, colCell := range row {
|
||
fmt.Print(colCell, "\t")
|
||
}
|
||
fmt.Println()
|
||
}
|
||
```
|
||
|