From e990ce28a19b9b956bd982b2cc9301075537fde3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=9F=E5=B8=85?= <133814250@qq.com> Date: Fri, 25 Nov 2022 23:22:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0gf=E7=89=88=E6=9C=AC=E5=88=B0?= =?UTF-8?q?v2.2.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 15 ++-- server/go.mod | 3 +- server/go.sum | 6 +- server/internal/cmd/cmd.go | 23 +++--- server/internal/cmd/handler_shutdown.go | 10 +-- .../controller/backend/admin/monitor.go | 8 +- server/internal/global/init.go | 10 +-- server/internal/logic/admin/notice.go | 4 +- server/utility/simple/simple.go | 76 +++++++++++++++++++ 9 files changed, 107 insertions(+), 48 deletions(-) create mode 100644 server/utility/simple/simple.go diff --git a/README.md b/README.md index 17017b6..e5d3f18 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# HotGO-V2 +# HotGo-V2
-
@@ -74,7 +74,7 @@
## 环境要求
- node版本 >= v16.0.0
- golang版本 >= v1.18
-- gf版本 >=2.1
+- gf版本 >=v2.2.4 (会保持同步gf最新版本,gf小版本更新可能存在兼容问题,旧版本需自行处理,如非必要不建议更新!)
- IDE推荐:Goland
- mysql版本 >=5.7
- redis版本 >=3.0
@@ -130,6 +130,9 @@ VITE_PROXY=[["/admin","http://你的IP:8000/admin"]]
```shell script
cd server
+ # 设置国内代理,如果已经设置好了代理可以跳过
+ go env -w GOPROXY=https://goproxy.io,direct
+
# 更新包
go mod tidy
@@ -137,7 +140,7 @@ VITE_PROXY=[["/admin","http://你的IP:8000/admin"]]
go run main.go
# 启动所有服务
- gf run main.go --args "all"
+ go run main.go all
# 如果顺利,至此到浏览器打开:http://你的IP:8000/admin,即可看到后台登录地址
# 登录账号:admin, 密码:123456
@@ -155,7 +158,7 @@ web端:
yarn install
# 启动web项目
- npm run dev
+ yarn dev
# 如果顺利,至此到浏览器打开:http://你的IP:8001/admin
```
@@ -203,7 +206,7 @@ web端:
## 交流QQ群
-交流群①:190966648
+交流群①:190966648
>
diff --git a/server/go.mod b/server/go.mod
index 826bfea..fa6c0ce 100644
--- a/server/go.mod
+++ b/server/go.mod
@@ -11,12 +11,11 @@ require (
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/go-resty/resty/v2 v2.7.0
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.2.0-beta2
- github.com/gogf/gf/v2 v2.2.0-beta2
+ github.com/gogf/gf/v2 v2.2.4
github.com/golang/mock v1.6.0 // indirect
github.com/gomodule/redigo v1.8.8
github.com/google/btree v1.1.2 // indirect
github.com/gorilla/websocket v1.5.0
- github.com/h2non/filetype v1.1.3
github.com/kayon/iploc v0.0.0-20200312105652-bda3e968a794
github.com/mattn/go-colorable v0.1.12 // indirect
github.com/mojocn/base64Captcha v1.3.5
diff --git a/server/go.sum b/server/go.sum
index cb700c4..c7b9645 100644
--- a/server/go.sum
+++ b/server/go.sum
@@ -127,8 +127,8 @@ github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg78
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.2.0-beta2 h1:QgVPXrGp8wJx18HIOsNATaIiHjXsd/Rk1F1QyxfWv+g=
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.2.0-beta2/go.mod h1:z+/0qiOwMroAnj5ESuobTv0l5P83rf+XR3r6Fj8WJyk=
github.com/gogf/gf/v2 v2.0.0/go.mod h1:apktt6TleWtCIwpz63vBqUnw8MX8gWKoZyxgDpXFtgM=
-github.com/gogf/gf/v2 v2.2.0-beta2 h1:XDx9dzUf3/9HRkSSZdW7XnI3gvtgpoKpDkP2ZsKlf/4=
-github.com/gogf/gf/v2 v2.2.0-beta2/go.mod h1:thvkyb43RWUu/m05sRm4CbH9r7t7/FrW2M56L9Ystwk=
+github.com/gogf/gf/v2 v2.2.4 h1:Y2c0F4dDDYlQswHPtoGJ0l9kvQjE0a9jmM02qCAZoqo=
+github.com/gogf/gf/v2 v2.2.4/go.mod h1:thvkyb43RWUu/m05sRm4CbH9r7t7/FrW2M56L9Ystwk=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
@@ -208,8 +208,6 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grokify/html-strip-tags-go v0.0.1 h1:0fThFwLbW7P/kOiTBs03FsJSV9RM2M/Q/MOnCQxKMo0=
github.com/grokify/html-strip-tags-go v0.0.1/go.mod h1:2Su6romC5/1VXOQMaWL2yb618ARB8iVo6/DR99A6d78=
-github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg=
-github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY=
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
diff --git a/server/internal/cmd/cmd.go b/server/internal/cmd/cmd.go
index 1d7d9f5..938bddd 100644
--- a/server/internal/cmd/cmd.go
+++ b/server/internal/cmd/cmd.go
@@ -10,7 +10,7 @@ import (
"context"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gcmd"
- "github.com/gogf/gf/v2/os/grpool"
+ "hotgo/utility/simple"
)
var (
@@ -20,13 +20,13 @@ var (
欢迎使用HotGo!
---------------------------------------------------------------------------------
启动服务
- >> HTTP服务 [gf run main.go --args "http"]
- >> 消息队列 [gf run main.go --args "queue"]
- >> 所有服务 [gf run main.go --args "all"]
+ >> HTTP服务 [go run main.go http]
+ >> 消息队列 [go run main.go queue]
+ >> 所有服务 [go run main.go all]
---------------------------------------------------------------------------------
工具
- >> 释放casbin权限,用于清理无效的权限设置 [gf run main.go --args "tools -m=casbin -a1=refresh"]
+ >> 释放casbin权限,用于清理无效的权限设置 [go run main.go tools -m=casbin -a1=refresh]
`,
}
@@ -46,22 +46,17 @@ var (
Func: func(ctx context.Context, parser *gcmd.Parser) (err error) {
g.Log().Info(ctx, "start all server")
- if err = grpool.AddWithRecover(ctx, func(ctx context.Context) {
+ simple.SafeGo(ctx, func(ctx context.Context) {
if err := Http.Func(ctx, parser); err != nil {
g.Log().Fatal(ctx, "http server start fail:", err)
}
- }); err != nil {
- return
- }
+ })
- if err = grpool.AddWithRecover(ctx, func(ctx context.Context) {
+ simple.SafeGo(ctx, func(ctx context.Context) {
if err := Queue.Func(ctx, parser); err != nil {
g.Log().Fatal(ctx, "queue consumer start fail:", err)
}
- }); err != nil {
- g.Log().Fatal(ctx, "queue consumer start fail2:", err)
- return
- }
+ })
// 信号监听
signalListen(ctx, signalHandlerForOverall)
diff --git a/server/internal/cmd/handler_shutdown.go b/server/internal/cmd/handler_shutdown.go
index 2940dfd..2c62eee 100644
--- a/server/internal/cmd/handler_shutdown.go
+++ b/server/internal/cmd/handler_shutdown.go
@@ -8,11 +8,10 @@ package cmd
import (
"context"
- "github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gproc"
- "github.com/gogf/gf/v2/os/grpool"
"hotgo/internal/crons"
"hotgo/internal/websocket"
+ "hotgo/utility/simple"
"os"
)
@@ -29,12 +28,9 @@ func signalHandlerForOverall(sig os.Signal) {
}
func signalListen(ctx context.Context, handler ...gproc.SigHandler) {
- err := grpool.AddWithRecover(ctx, func(ctx context.Context) {
+ simple.SafeGo(ctx, func(ctx context.Context) {
gproc.AddSigHandlerShutdown(handler...)
gproc.Listen()
})
- if err != nil {
- g.Log().Fatal(ctx, "signalListen Fatal:", err)
- return
- }
+
}
diff --git a/server/internal/controller/backend/admin/monitor.go b/server/internal/controller/backend/admin/monitor.go
index 4259464..23246db 100644
--- a/server/internal/controller/backend/admin/monitor.go
+++ b/server/internal/controller/backend/admin/monitor.go
@@ -10,11 +10,11 @@ import (
"context"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/os/grpool"
"hotgo/api/backend/monitor"
"hotgo/internal/consts"
"hotgo/internal/model/input/form"
"hotgo/internal/websocket"
+ "hotgo/utility/simple"
"hotgo/utility/useragent"
"sort"
)
@@ -36,13 +36,11 @@ func (c *cMonitor) Offline(ctx context.Context, req *monitor.OfflineReq) (res *m
return
}
- err = grpool.AddWithRecover(ctx, func(ctx context.Context) {
+ simple.SafeGo(ctx, func(ctx context.Context) {
websocket.SendSuccess(client, "kick")
websocket.Close(client)
})
- if err != nil {
- return nil, err
- }
+
return res, nil
}
diff --git a/server/internal/global/init.go b/server/internal/global/init.go
index e2a8a20..9db809e 100644
--- a/server/internal/global/init.go
+++ b/server/internal/global/init.go
@@ -9,10 +9,9 @@ package global
import (
"context"
"fmt"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/os/grpool"
"github.com/gogf/gf/v2/os/gtime"
"hotgo/internal/library/location"
+ "hotgo/utility/simple"
"os"
)
@@ -29,14 +28,9 @@ func Init(ctx context.Context) {
}
func loadMonitor(ctx context.Context) {
- err := grpool.AddWithRecover(ctx, func(ctx context.Context) {
+ simple.SafeGo(ctx, func(ctx context.Context) {
MonitorData.STartTime = gtime.Now()
MonitorData.IntranetIP, _ = location.GetLocalIP()
MonitorData.PublicIP, _ = location.GetPublicIP()
-
})
- if err != nil {
- g.Log().Fatal(ctx, "global loadMonitor Fatal:", err)
- return
- }
}
diff --git a/server/internal/logic/admin/notice.go b/server/internal/logic/admin/notice.go
index 37124e8..84cc2be 100644
--- a/server/internal/logic/admin/notice.go
+++ b/server/internal/logic/admin/notice.go
@@ -9,7 +9,6 @@ package admin
import (
"context"
"github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/os/grpool"
"github.com/gogf/gf/v2/os/gtime"
"hotgo/internal/consts"
"hotgo/internal/dao"
@@ -18,6 +17,7 @@ import (
"hotgo/internal/websocket"
"hotgo/utility/charset"
"hotgo/utility/convert"
+ "hotgo/utility/simple"
"strings"
)
@@ -75,7 +75,7 @@ func (s *sAdminNotice) Edit(ctx context.Context, in adminin.NoticeEditInp) (err
Event: "notice",
Data: in,
}
- grpool.AddWithRecover(ctx, func(ctx context.Context) {
+ simple.SafeGo(ctx, func(ctx context.Context) {
if len(memberIds) == 0 {
websocket.SendToAll(response)
} else {
diff --git a/server/utility/simple/simple.go b/server/utility/simple/simple.go
new file mode 100644
index 0000000..3765d2b
--- /dev/null
+++ b/server/utility/simple/simple.go
@@ -0,0 +1,76 @@
+// Package simple
+// @Link https://github.com/bufanyun/hotgo
+// @Copyright Copyright (c) 2022 HotGo CLI
+// @Author Ms <133814250@qq.com>
+// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
+//
+package simple
+
+import (
+ "context"
+ "github.com/gogf/gf/v2/frame/g"
+ "github.com/gogf/gf/v2/os/glog"
+ "github.com/gogf/gf/v2/util/gconv"
+)
+
+func SafeGo(ctx context.Context, f func(ctx context.Context), level ...interface{}) {
+ go func() {
+ defer func() {
+ if err := recover(); err != nil {
+ var newLevel = glog.LEVEL_ERRO
+ if len(level) > 0 {
+ newLevel = gconv.Int(level[0])
+ }
+ Logf(newLevel, ctx, "SafeGo failed err:%+v", err)
+ }
+ }()
+
+ f(ctx)
+ }()
+}
+
+func Logf(level int, ctx context.Context, format string, v ...interface{}) {
+ switch level {
+ case glog.LEVEL_DEBU:
+ g.Log().Debugf(ctx, format, v)
+ case glog.LEVEL_INFO:
+ g.Log().Infof(ctx, format, v)
+ case glog.LEVEL_NOTI:
+ g.Log().Noticef(ctx, format, v)
+ case glog.LEVEL_WARN:
+ g.Log().Warningf(ctx, format, v)
+ case glog.LEVEL_ERRO:
+ g.Log().Errorf(ctx, format, v)
+ case glog.LEVEL_CRIT:
+ g.Log().Critical(ctx, format, v)
+ case glog.LEVEL_PANI:
+ g.Log().Panicf(ctx, format, v)
+ case glog.LEVEL_FATA:
+ g.Log().Fatalf(ctx, format, v)
+ default:
+ g.Log().Error(ctx, "Logf level not find")
+ }
+}
+
+func Log(level int, ctx context.Context, v ...interface{}) {
+ switch level {
+ case glog.LEVEL_DEBU:
+ g.Log().Debug(ctx, v)
+ case glog.LEVEL_INFO:
+ g.Log().Info(ctx, v)
+ case glog.LEVEL_NOTI:
+ g.Log().Notice(ctx, v)
+ case glog.LEVEL_WARN:
+ g.Log().Warning(ctx, v)
+ case glog.LEVEL_ERRO:
+ g.Log().Error(ctx, v)
+ case glog.LEVEL_CRIT:
+ g.Log().Critical(ctx, v)
+ case glog.LEVEL_PANI:
+ g.Log().Panic(ctx, v)
+ case glog.LEVEL_FATA:
+ g.Log().Fatal(ctx, v)
+ default:
+ g.Log().Error(ctx, "Logf level not find")
+ }
+}