Skip to content

Commit f038c9e

Browse files
author
memory-overflow
committed
函数执行器采用 cached map
1 parent 435d41f commit f038c9e

File tree

3 files changed

+49
-41
lines changed

3 files changed

+49
-41
lines changed

actuator/function_actuator.go

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import (
77
"errors"
88
"fmt"
99
"runtime/debug"
10-
"sync"
1110
"time"
1211

1312
framework "github.com/memory-overflow/light-task-scheduler"
13+
"github.com/patrickmn/go-cache"
1414
)
1515

1616
// fucntionActuator 函数执行器,同步任务异步化的示例
@@ -19,8 +19,8 @@ type fucntionActuator struct {
1919
initFunc InitFunction // 初始函数
2020
callbackChannel chan framework.Task // 回调队列
2121

22-
runningTask sync.Map // taskId -> [framework.AsyncTaskStatus, cancel function] 映射
23-
datatMap sync.Map // taskId -> interface{} 映射
22+
runningTask *cache.Cache // taskId -> [framework.AsyncTaskStatus, cancel function] 映射
23+
datatMap *cache.Cache // taskId -> interface{} 映射
2424

2525
}
2626

@@ -38,8 +38,10 @@ func MakeFucntionActuator(runFunc RunFunction, initFunc InitFunction) (*fucntion
3838
return nil, fmt.Errorf("runFunc is nil")
3939
}
4040
return &fucntionActuator{
41-
runFunc: runFunc,
42-
initFunc: initFunc,
41+
runFunc: runFunc,
42+
initFunc: initFunc,
43+
runningTask: cache.New(5*24*time.Hour, 24*time.Hour), // 缓存5天
44+
datatMap: cache.New(5*24*time.Hour, 24*time.Hour), // 缓存5天
4345
}, nil
4446
}
4547

@@ -60,7 +62,7 @@ func (fc *fucntionActuator) Init(ctx context.Context, task *framework.Task) (
6062
// Start 执行任务
6163
func (fc *fucntionActuator) Start(ctx context.Context, ftask *framework.Task) (
6264
newTask *framework.Task, ignoreErr bool, err error) {
63-
if st, ok := fc.runningTask.Load(ftask.TaskId); ok {
65+
if st, ok := fc.runningTask.Get(ftask.TaskId); ok {
6466
status := st.([]interface{})[0].(framework.AsyncTaskStatus).TaskStatus
6567
if status == framework.TASK_STATUS_RUNNING || status == framework.TASK_STATUS_SUCCESS {
6668
// 任务已经在执行中,不能重复执行
@@ -72,12 +74,12 @@ func (fc *fucntionActuator) Start(ctx context.Context, ftask *framework.Task) (
7274
ftask.TaskStatus = framework.TASK_STATUS_RUNNING
7375
ftask.TaskStartTime = time.Now()
7476
fc.datatMap.Delete(ftask.TaskId)
75-
fc.runningTask.Store(ftask.TaskId,
77+
fc.runningTask.Set(ftask.TaskId,
7678
[]interface{}{
7779
framework.AsyncTaskStatus{
7880
TaskStatus: framework.TASK_STATUS_RUNNING,
7981
Progress: 0.0,
80-
}, cancel})
82+
}, cancel}, cache.DefaultExpiration)
8183

8284
go func() {
8385
data, err := func() (data interface{}, err error) {
@@ -90,7 +92,7 @@ func (fc *fucntionActuator) Start(ctx context.Context, ftask *framework.Task) (
9092
}()
9193
return fc.runFunc(runCtx, ftask)
9294
}()
93-
st, ok := fc.runningTask.Load(ftask.TaskId)
95+
st, ok := fc.runningTask.Get(ftask.TaskId)
9496
if !ok {
9597
// 任务可能因为超时被删除,或者手动暂停、不处理
9698
return
@@ -110,9 +112,9 @@ func (fc *fucntionActuator) Start(ctx context.Context, ftask *framework.Task) (
110112
TaskStatus: framework.TASK_STATUS_SUCCESS,
111113
Progress: 100.0,
112114
}
113-
fc.datatMap.Store(ftask.TaskId, data) // 先存结果
115+
fc.datatMap.Set(ftask.TaskId, data, cache.DefaultExpiration) // 先存结果
114116
}
115-
fc.runningTask.Store(ftask.TaskId, []interface{}{newStatus, nil})
117+
fc.runningTask.Set(ftask.TaskId, []interface{}{newStatus, nil}, cache.DefaultExpiration)
116118
if fc.callbackChannel != nil {
117119
// 如果需要回调
118120
callbackTask := *ftask
@@ -135,7 +137,7 @@ func (fc *fucntionActuator) clear(taskId string) {
135137

136138
// Stop 停止任务
137139
func (fc *fucntionActuator) Stop(ctx context.Context, ftask *framework.Task) error {
138-
st, ok := fc.runningTask.Load(ftask.TaskId)
140+
st, ok := fc.runningTask.Get(ftask.TaskId)
139141
if !ok {
140142
// 未找到任务
141143
fc.datatMap.Delete(ftask.TaskId)
@@ -152,7 +154,7 @@ func (fc *fucntionActuator) Stop(ctx context.Context, ftask *framework.Task) err
152154
func (fc *fucntionActuator) GetAsyncTaskStatus(ctx context.Context, ftasks []framework.Task) (
153155
status []framework.AsyncTaskStatus, err error) {
154156
for _, ftask := range ftasks {
155-
fstatus, ok := fc.runningTask.Load(ftask.TaskId)
157+
fstatus, ok := fc.runningTask.Get(ftask.TaskId)
156158
if !ok {
157159
status = append(status, framework.AsyncTaskStatus{
158160
TaskStatus: framework.TASK_STATUS_FAILED,
@@ -173,7 +175,7 @@ func (fc *fucntionActuator) GetAsyncTaskStatus(ctx context.Context, ftasks []fra
173175
// GetOutput ...
174176
func (fc *fucntionActuator) GetOutput(ctx context.Context, ftask *framework.Task) (
175177
data interface{}, err error) {
176-
res, ok := fc.datatMap.Load(ftask.TaskId)
178+
res, ok := fc.datatMap.Get(ftask.TaskId)
177179
if !ok {
178180
return nil, fmt.Errorf("not found result for task %s", ftask.TaskId)
179181
}

go.mod

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,17 @@ require (
99
github.com/docker/go-connections v0.4.0
1010
github.com/memory-overflow/go-common-library v0.0.0-20230427064346-aef3d86a1c60
1111
github.com/memory-overflow/go-orderedmap v0.0.0-20230427064227-758a452e8a9c
12-
gorm.io/driver/mysql v1.2.1
12+
github.com/patrickmn/go-cache v2.1.0+incompatible
13+
gorm.io/driver/mysql v1.5.1
1314
gorm.io/gorm v1.25.12
1415
)
1516

1617
require (
18+
filippo.io/edwards25519 v1.1.0 // indirect
1719
github.com/Microsoft/go-winio v0.6.1 // indirect
1820
github.com/docker/distribution v2.8.2+incompatible // indirect
1921
github.com/docker/go-units v0.5.0 // indirect
20-
github.com/go-sql-driver/mysql v1.7.0 // indirect
22+
github.com/go-sql-driver/mysql v1.8.1 // indirect
2123
github.com/gogo/protobuf v1.3.2 // indirect
2224
github.com/jinzhu/inflection v1.0.0 // indirect
2325
github.com/jinzhu/now v1.1.5 // indirect
@@ -30,11 +32,12 @@ require (
3032
github.com/opencontainers/image-spec v1.0.2 // indirect
3133
github.com/pkg/errors v0.9.1 // indirect
3234
github.com/stretchr/testify v1.7.0 // indirect
33-
golang.org/x/mod v0.12.0 // indirect
34-
golang.org/x/net v0.15.0 // indirect
35-
golang.org/x/sys v0.12.0 // indirect
36-
golang.org/x/text v0.14.0 // indirect
35+
golang.org/x/mod v0.17.0 // indirect
36+
golang.org/x/net v0.25.0 // indirect
37+
golang.org/x/sync v0.9.0 // indirect
38+
golang.org/x/sys v0.20.0 // indirect
39+
golang.org/x/text v0.20.0 // indirect
3740
golang.org/x/time v0.12.0 // indirect
38-
golang.org/x/tools v0.13.0 // indirect
41+
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
3942
gotest.tools/v3 v3.5.2 // indirect
4043
)

go.sum

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
2+
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
13
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg=
24
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
35
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
@@ -14,18 +16,17 @@ github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5Xh
1416
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
1517
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
1618
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
17-
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
18-
github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc=
1919
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
20+
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
21+
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
2022
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
2123
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
22-
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
23-
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
24+
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
25+
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
2426
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
2527
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
2628
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
2729
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
28-
github.com/jinzhu/now v1.1.3/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
2930
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
3031
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
3132
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
@@ -48,6 +49,8 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8
4849
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
4950
github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM=
5051
github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
52+
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
53+
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
5154
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
5255
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
5356
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -66,46 +69,46 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
6669
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
6770
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
6871
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
69-
golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
70-
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
72+
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
73+
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
7174
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
7275
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
7376
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
7477
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
75-
golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8=
76-
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
78+
golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
79+
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
7780
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
7881
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
7982
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
80-
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
81-
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
83+
golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ=
84+
golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
8285
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
8386
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
8487
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
85-
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
86-
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
88+
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
89+
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
8790
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
8891
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
89-
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
90-
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
92+
golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
93+
golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
9194
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
9295
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
9396
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
9497
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
9598
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
9699
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
97-
golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ=
98-
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
100+
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
101+
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
99102
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
100103
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
101104
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
102105
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
103106
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
104107
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
105108
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
106-
gorm.io/driver/mysql v1.2.1 h1:h+3f1l9Ng2C072Y2tIiLgPpWN78r1KXL7bHJ0nTjlhU=
107-
gorm.io/driver/mysql v1.2.1/go.mod h1:qsiz+XcAyMrS6QY+X3M9R6b/lKM1imKmcuK9kac5LTo=
108-
gorm.io/gorm v1.22.4/go.mod h1:1aeVC+pe9ZmvKZban/gW4QPra7PRoTEssyc922qCAkk=
109+
gorm.io/driver/mysql v1.5.1 h1:WUEH5VF9obL/lTtzjmML/5e6VfFR/788coz2uaVCAZw=
110+
gorm.io/driver/mysql v1.5.1/go.mod h1:Jo3Xu7mMhCyj8dlrb3WoCaRd1FhsVh+yMXb1jUInf5o=
111+
gorm.io/gorm v1.25.1/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
109112
gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
110113
gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
111114
gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=

0 commit comments

Comments
 (0)