Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b3c9cd1

Browse files
authored
Merge pull request studygolang#117 from lunny/lunny/use_echov4
Use echov4
2 parents 15b1577 + b3c188b commit b3c9cd1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

85 files changed

+1169
-612
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,4 @@ welcome.png
4848
.DS_Store
4949
/env.ini
5050
ssl
51+
studygolang

cmd/crawler.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@
77
package cmd
88

99
import (
10-
"math/rand"
11-
"time"
12-
1310
"github.com/studygolang/studygolang/modules/server"
1411

1512
"github.com/polaris1119/config"

cmd/indexer.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@
77
package cmd
88

99
import (
10-
"math/rand"
11-
"time"
12-
1310
"github.com/studygolang/studygolang/modules/server"
1411

1512
"github.com/polaris1119/config"

go.mod

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ require (
77
github.com/Unknwon/goconfig v0.0.0-20190425194916-3dba17dd7b9e // indirect
88
github.com/adamzy/cedar-go v0.0.0-20170805034717-80a9c64b256d // indirect
99
github.com/dchest/captcha v0.0.0-20170622155422-6a29415a8364
10-
github.com/dgrijalva/jwt-go v3.2.0+incompatible // indirect
1110
github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a // indirect
1211
github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51 // indirect
1312
github.com/facebookgo/freeport v0.0.0-20150612182905-d4adf43b75b9 // indirect
@@ -30,21 +29,18 @@ require (
3029
github.com/issue9/assert v1.3.3 // indirect
3130
github.com/jaytaylor/html2text v0.0.0-20190408195923-01ec452cbe43
3231
github.com/jmcvetta/randutil v0.0.0-20150817122601-2bb1b664bcff // indirect
33-
github.com/labstack/echo v2.0.0+incompatible
34-
github.com/labstack/gommon v0.2.9 // indirect
32+
github.com/labstack/echo/v4 v4.1.8
3533
github.com/lunny/html2md v0.0.0-20181018071239-7d234de44546
3634
github.com/mattn/go-runewidth v0.0.4 // indirect
3735
github.com/myesui/uuid v1.0.0 // indirect
3836
github.com/olekukonko/tablewriter v0.0.1 // indirect
39-
github.com/polaris1119/config v0.0.0-20160628025248-e4f8b7e9e2ef
40-
github.com/polaris1119/echoutils v0.0.0-20170312113056-5e14d4b37f74
37+
github.com/polaris1119/config v0.0.0-20160609095218-06a751e884f3
4138
github.com/polaris1119/email v0.0.0-20171030115359-9c57dd3e3e7d
4239
github.com/polaris1119/goutils v0.0.0-20160602032428-582c98b3184b
4340
github.com/polaris1119/keyword v0.0.0-20170608075927-96ae6735f2f2
4441
github.com/polaris1119/logger v0.0.0-20170422061149-0233d014769e
45-
github.com/polaris1119/middleware v0.0.0-20170422072158-4876473158db
4642
github.com/polaris1119/nosql v0.0.0-20181019111233-3852ef28d084
47-
github.com/polaris1119/set v0.1.0
43+
github.com/polaris1119/set v0.1.1-0.20160423093427-654439414ced
4844
github.com/polaris1119/slices v0.0.0-20160517071324-6ecacdb3cd38
4945
github.com/polaris1119/times v0.0.0-20160420102536-14f7f3ba487e
5046
github.com/qiniu/api.v6 v6.0.9+incompatible
@@ -53,16 +49,13 @@ require (
5349
github.com/robfig/cron v1.2.0
5450
github.com/smartystreets/goconvey v0.0.0-20190710185942-9d28bd7c0945 // indirect
5551
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect
56-
github.com/sundy-li/html2article v0.0.0-20180131134645-09ac198090c2
52+
github.com/sundy-li/html2article v0.0.0-20170724020440-d0b6c083441f
5753
github.com/tidwall/gjson v1.3.2
5854
github.com/twinj/uuid v1.0.0
5955
github.com/tylerb/graceful v1.2.15
6056
golang.org/x/net v0.0.0-20190607181551-461777fb6f67
6157
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421
62-
golang.org/x/sys v0.0.0-20190609082536-301114b31cce // indirect
6358
golang.org/x/text v0.3.2
6459
gopkg.in/validator.v2 v2.0.0-20180514200540-135c24b11c19 // indirect
6560
xorm.io/core v0.7.0
6661
)
67-
68-
replace github.com/labstack/echo => github.com/labstack/echo v2.0.0+incompatible

go.sum

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
120120
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
121121
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
122122
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
123-
github.com/labstack/echo v2.0.0+incompatible h1:JtLdmPtaJQNlckAj3+v7HhuK2hH+cVsQq1G/dngDyiY=
124-
github.com/labstack/echo v2.0.0+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s=
123+
github.com/labstack/echo/v4 v4.1.8 h1:2IBbRrln806Ao53hR4dxU1SFgJEDWG/IUU81ryYlGdE=
124+
github.com/labstack/echo/v4 v4.1.8/go.mod h1:kU/7PwzgNxZH4das4XNsSpBSOD09XIF5YEPzjpkGnGE=
125125
github.com/labstack/gommon v0.2.9 h1:heVeuAYtevIQVYkGj6A41dtfT91LrvFG220lavpWhrU=
126126
github.com/labstack/gommon v0.2.9/go.mod h1:E8ZTmW9vw5az5/ZyHWCp0Lw4OH2ecsaBP1C/NKavGG4=
127127
github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A=
@@ -152,10 +152,8 @@ github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
152152
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
153153
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
154154
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
155-
github.com/polaris1119/config v0.0.0-20160628025248-e4f8b7e9e2ef h1:Hswn/QnK+k/vx3Qw05tkRdHsBOKrnSHYGn5Tb2qDQgM=
156-
github.com/polaris1119/config v0.0.0-20160628025248-e4f8b7e9e2ef/go.mod h1:up6EO6QVWJMpgNMhqqZx2ImgXyfH28qf84Jf66SIm88=
157-
github.com/polaris1119/echoutils v0.0.0-20170312113056-5e14d4b37f74 h1:6O7gcATWcXALbDxg5TXjoGekgv+pJcUGck2qZV32i8g=
158-
github.com/polaris1119/echoutils v0.0.0-20170312113056-5e14d4b37f74/go.mod h1:Yn1ruFUqLnCWCbj6KRNJJ25CJS9cwg11a7di+cxK1Uo=
155+
github.com/polaris1119/config v0.0.0-20160609095218-06a751e884f3 h1:ql/tT34m2dfi00D38NSRu6us2ykhsDtUsEEFNjEpjBo=
156+
github.com/polaris1119/config v0.0.0-20160609095218-06a751e884f3/go.mod h1:up6EO6QVWJMpgNMhqqZx2ImgXyfH28qf84Jf66SIm88=
159157
github.com/polaris1119/email v0.0.0-20171030115359-9c57dd3e3e7d h1:5Tx8BuKqRGhit6t1VHqOLbSLhxTFZF6DypyyA7nn/lI=
160158
github.com/polaris1119/email v0.0.0-20171030115359-9c57dd3e3e7d/go.mod h1:3S7Km+d2GftzOJJgrvIGHDtRxm5eUZamHaoUzLZNJX0=
161159
github.com/polaris1119/goutils v0.0.0-20160602032428-582c98b3184b h1:THcO90yP3NaMbkQmcnKyu8wJBS1iSO3Z7eAo5axqVbA=
@@ -164,12 +162,10 @@ github.com/polaris1119/keyword v0.0.0-20170608075927-96ae6735f2f2 h1:63TyJE7nj3e
164162
github.com/polaris1119/keyword v0.0.0-20170608075927-96ae6735f2f2/go.mod h1:YYx1sYXgS43cG1iH0cXYFcibESl8azhUrA6W10gYb9E=
165163
github.com/polaris1119/logger v0.0.0-20170422061149-0233d014769e h1:HSeLmpKe7eny4fT5tdnYfQffWvx6aKCdzIcW/MZWt3I=
166164
github.com/polaris1119/logger v0.0.0-20170422061149-0233d014769e/go.mod h1:7wFzOsSeMeuwhnZItJVfX1WClNpCyXuO0kj+ifdK+LQ=
167-
github.com/polaris1119/middleware v0.0.0-20170422072158-4876473158db h1:Y9qVBlerEJEZgyh8QrUP5/9frNJXZRvkiuDxprdn4uw=
168-
github.com/polaris1119/middleware v0.0.0-20170422072158-4876473158db/go.mod h1:9qyAASpDEEzNuL2OSGxcTm9hLU4M8gl4Am4z5JE92Bc=
169165
github.com/polaris1119/nosql v0.0.0-20181019111233-3852ef28d084 h1:tgfnz7bUVQ0MtsvaT3R47E083V7FVP0GIDsmXhkTdD0=
170166
github.com/polaris1119/nosql v0.0.0-20181019111233-3852ef28d084/go.mod h1:AQkEEdvgfOXmx5L7HLvGLZPWnbNa/EIOEpMhTTOor3g=
171-
github.com/polaris1119/set v0.1.0 h1:Uol42yh0yIZMO/QMzrI4FtZj4U/R4uL41gK3MWrgebI=
172-
github.com/polaris1119/set v0.1.0/go.mod h1:f3pW74DeWib9bLGgMImip5zikwTB5dQ53JVrmT3CYrQ=
167+
github.com/polaris1119/set v0.1.1-0.20160423093427-654439414ced h1:5E6fZkU0PW8RIoOOOQq+NJ6ICZDtk/3mON49Ezl0raY=
168+
github.com/polaris1119/set v0.1.1-0.20160423093427-654439414ced/go.mod h1:f3pW74DeWib9bLGgMImip5zikwTB5dQ53JVrmT3CYrQ=
173169
github.com/polaris1119/slices v0.0.0-20160517071324-6ecacdb3cd38 h1:DUG5gZoTQGtKgQogadMFJ2hUCchqPBchezdHsgncEj4=
174170
github.com/polaris1119/slices v0.0.0-20160517071324-6ecacdb3cd38/go.mod h1:ZHrklmzhHyC2VcV6ef41IXDRFKyUKe0XtTrYqbMe50Y=
175171
github.com/polaris1119/times v0.0.0-20160420102536-14f7f3ba487e h1:t2A6UPUvJrNLdtIJAPFlCUkOAsqm7jYdGb1X82WAu/g=
@@ -207,8 +203,8 @@ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoH
207203
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
208204
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
209205
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
210-
github.com/sundy-li/html2article v0.0.0-20180131134645-09ac198090c2 h1:oKj2rhPl8vQ6SThsvFSuMDEbWCqPyxy/CGCNupPWCfY=
211-
github.com/sundy-li/html2article v0.0.0-20180131134645-09ac198090c2/go.mod h1:qEPne4GSiuwCg1E5EuIjpk+O6ZAMwpDZnzqu1I5WEGU=
206+
github.com/sundy-li/html2article v0.0.0-20170724020440-d0b6c083441f h1:zx8a5HQgs9SltyIFdhA+Y94Wgk9D5agl/UMN2+oHiKM=
207+
github.com/sundy-li/html2article v0.0.0-20170724020440-d0b6c083441f/go.mod h1:qEPne4GSiuwCg1E5EuIjpk+O6ZAMwpDZnzqu1I5WEGU=
212208
github.com/tidwall/gjson v1.3.2 h1:+7p3qQFaH3fOMXAJSrdZwGKcOO/lYdGS0HqGhPqDdTI=
213209
github.com/tidwall/gjson v1.3.2/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls=
214210
github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc=
@@ -281,6 +277,7 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3
281277
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
282278
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
283279
golang.org/x/tools v0.0.0-20190606050223-4d9ae51c2468/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
280+
golang.org/x/tools v0.0.0-20190608022120-eacb66d2a7c3/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
284281
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
285282
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
286283
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=

graceful_unix.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ package main
44

55
import (
66
"log"
7+
"net/http"
78

89
"github.com/facebookgo/grace/gracehttp"
9-
"github.com/labstack/echo/engine/standard"
1010
)
1111

12-
func gracefulRun(std *standard.Server) {
13-
log.Fatal(gracehttp.Serve(std.Server))
12+
func gracefulRun(server *http.Server) {
13+
log.Fatal(gracehttp.Serve(server))
1414
}

graceful_windows.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ package main
22

33
import (
44
"log"
5+
"net/http"
56
"time"
67

7-
"github.com/labstack/echo/engine/standard"
88
"github.com/tylerb/graceful"
99
)
1010

11-
func gracefulRun(std *standard.Server) {
12-
log.Fatal(graceful.ListenAndServe(std.Server, 5*time.Second))
11+
func gracefulRun(server *http.Server) {
12+
log.Fatal(graceful.ListenAndServe(server, 5*time.Second))
1313
}

main.go

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,21 @@ import (
1414
"strconv"
1515
"time"
1616

17-
. "github.com/polaris1119/config"
18-
1917
"github.com/studygolang/studygolang/modules/global"
2018
pwm "github.com/studygolang/studygolang/modules/http/middleware"
2119
"github.com/studygolang/studygolang/modules/http/controller"
2220
"github.com/studygolang/studygolang/modules/http/controller/admin"
2321
"github.com/studygolang/studygolang/modules/http/controller/app"
2422
"github.com/studygolang/studygolang/modules/logic"
23+
"github.com/studygolang/studygolang/cmd"
24+
thirdmw "github.com/studygolang/studygolang/modules/middleware"
2525

2626
"github.com/fatih/structs"
27-
"github.com/labstack/echo"
28-
"github.com/labstack/echo/engine/standard"
29-
mw "github.com/labstack/echo/middleware"
27+
echo "github.com/labstack/echo/v4"
28+
mw "github.com/labstack/echo/v4/middleware"
3029
"github.com/polaris1119/keyword"
3130
"github.com/polaris1119/logger"
32-
thirdmw "github.com/polaris1119/middleware"
31+
. "github.com/polaris1119/config"
3332
)
3433

3534
func init() {
@@ -94,10 +93,8 @@ func main() {
9493
appG := e.Group("/app")
9594
app.RegisterRoutes(appG)
9695

97-
std := standard.New(getAddr())
98-
std.SetHandler(e)
99-
100-
gracefulRun(std)
96+
e.Server.Addr = getAddr()
97+
gracefulRun(e.Server)
10198
}
10299

103100
func getAddr() string {

modules/context/context.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package context
2+
3+
import (
4+
"context"
5+
6+
echo "github.com/labstack/echo/v4"
7+
)
8+
9+
type echoCtx struct {
10+
context.Context
11+
ctx echo.Context
12+
}
13+
14+
func (c *echoCtx) Value(key interface{}) interface{} {
15+
return c.ctx.Get(key.(string))
16+
}
17+
18+
func EchoContext(ctx echo.Context) context.Context {
19+
return &echoCtx{context.Background(), ctx}
20+
}

modules/echoutils/echoutils.go

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
package echoutils
2+
3+
import (
4+
"context"
5+
"encoding/json"
6+
"fmt"
7+
"net/http"
8+
"reflect"
9+
"time"
10+
11+
mycontext "github.com/studygolang/studygolang/modules/context"
12+
13+
"github.com/labstack/echo/v4"
14+
"github.com/polaris1119/goutils"
15+
"github.com/polaris1119/logger"
16+
"github.com/polaris1119/nosql"
17+
)
18+
19+
const logKey = "logger"
20+
21+
// GetLogger 由调用者确保 ctx 中存在 logger.Logger 对象
22+
func GetLogger(ctx context.Context) *logger.Logger {
23+
return ctx.Value(logKey).(*logger.Logger)
24+
}
25+
26+
// 是否异步处理
27+
func IsAsync(ctx echo.Context) bool {
28+
return goutils.MustBool(ctx.FormValue("async"), false)
29+
}
30+
31+
// WrapContext 返回一个 context.Context 实例
32+
func WrapEchoContext(ctx echo.Context) context.Context {
33+
return mycontext.EchoContext(ctx)
34+
}
35+
36+
// WrapContext 返回一个 context.Context 实例。如果 ctx == nil,需要确保 调用 logger.PutLogger()
37+
func WrapContext(ctx context.Context) context.Context {
38+
var objLogger *logger.Logger
39+
if ctx == nil {
40+
ctx = context.Background()
41+
objLogger = logger.GetLogger()
42+
} else {
43+
objLogger = GetLogger(ctx)
44+
}
45+
return context.WithValue(ctx, logKey, objLogger)
46+
}
47+
48+
func LogFlush(ctx context.Context) {
49+
objLogger := GetLogger(ctx)
50+
objLogger.Flush()
51+
logger.PutLogger(objLogger)
52+
}
53+
54+
func Success(ctx echo.Context, data interface{}) error {
55+
result := map[string]interface{}{
56+
"code": 0,
57+
"msg": "ok",
58+
"data": data,
59+
}
60+
61+
b, err := json.Marshal(result)
62+
if err != nil {
63+
return err
64+
}
65+
66+
go func(b []byte) {
67+
if cacheKey := ctx.Get(nosql.CacheKey); cacheKey != nil {
68+
logger.Debugln("cache save:", cacheKey, "now:", time.Now())
69+
nosql.DefaultLRUCache.CompressAndAdd(cacheKey, b, nosql.NewCacheData())
70+
}
71+
}(b)
72+
73+
if ctx.Response().Committed {
74+
LogFlush(WrapEchoContext(ctx))
75+
return nil
76+
}
77+
78+
return ctx.JSONBlob(http.StatusOK, b)
79+
}
80+
81+
func Fail(ctx echo.Context, code int, msg string) error {
82+
if ctx.Response().Committed {
83+
LogFlush(WrapEchoContext(ctx))
84+
return nil
85+
}
86+
87+
result := map[string]interface{}{
88+
"code": code,
89+
"msg": msg,
90+
}
91+
92+
GetLogger(WrapEchoContext(ctx)).Errorln("operate fail:", result)
93+
94+
return ctx.JSON(http.StatusOK, result)
95+
}
96+
97+
func AsyncResponse(ctx echo.Context, logicInstance interface{}, methodName string, args ...interface{}) error {
98+
wrapCtx := mycontext.EchoContext(ctx)
99+
go func() {
100+
defer func() {
101+
if err := recover(); err != nil {
102+
fmt.Println("async response panic:", err)
103+
}
104+
}()
105+
defer LogFlush(wrapCtx)
106+
107+
instance := reflect.ValueOf(logicInstance)
108+
109+
in := make([]reflect.Value, len(args)+1)
110+
in[0] = reflect.ValueOf(wrapCtx)
111+
for i, arg := range args {
112+
in[i+1] = reflect.ValueOf(arg)
113+
}
114+
115+
instance.MethodByName(methodName).Call(in)
116+
}()
117+
118+
return Success(ctx, nil)
119+
}

0 commit comments

Comments
 (0)