8
8
"net"
9
9
"net/http"
10
10
"strings"
11
- "sync"
12
11
13
12
"github.com/labstack/echo"
14
13
)
@@ -55,7 +54,6 @@ func GzipWithConfig(config GzipConfig) echo.MiddlewareFunc {
55
54
config .Level = DefaultGzipConfig .Level
56
55
}
57
56
58
- pool := gzipPool (config )
59
57
scheme := "gzip"
60
58
61
59
return func (next echo.HandlerFunc ) echo.HandlerFunc {
@@ -68,11 +66,10 @@ func GzipWithConfig(config GzipConfig) echo.MiddlewareFunc {
68
66
res .Header ().Add (echo .HeaderVary , echo .HeaderAcceptEncoding )
69
67
if strings .Contains (c .Request ().Header .Get (echo .HeaderAcceptEncoding ), scheme ) {
70
68
rw := res .Writer ()
71
- w := pool .Get ().(* gzip.Writer )
72
- w .Reset (c .Response ().Writer ())
73
- // rw := res.Writer()
74
- // gw := pool.Get().(*gzip.Writer)
75
- // gw.Reset(rw)
69
+ w , err := gzip .NewWriterLevel (rw , config .Level )
70
+ if err != nil {
71
+ return err
72
+ }
76
73
defer func () {
77
74
if res .Size == 0 {
78
75
// We have to reset response to it's pristine state when
@@ -83,9 +80,8 @@ func GzipWithConfig(config GzipConfig) echo.MiddlewareFunc {
83
80
w .Reset (ioutil .Discard )
84
81
}
85
82
w .Close ()
86
- pool .Put (w )
87
83
}()
88
- grw := gzipResponseWriter {Writer : w , ResponseWriter : res . Writer () }
84
+ grw := & gzipResponseWriter {Writer : w , ResponseWriter : rw }
89
85
res .Header ().Set (echo .HeaderContentEncoding , scheme )
90
86
res .SetWriter (grw )
91
87
}
@@ -94,30 +90,21 @@ func GzipWithConfig(config GzipConfig) echo.MiddlewareFunc {
94
90
}
95
91
}
96
92
97
- func (w gzipResponseWriter ) Write (b []byte ) (int , error ) {
93
+ func (w * gzipResponseWriter ) Write (b []byte ) (int , error ) {
98
94
if w .Header ().Get (echo .HeaderContentType ) == "" {
99
95
w .Header ().Set (echo .HeaderContentType , http .DetectContentType (b ))
100
96
}
101
97
return w .Writer .Write (b )
102
98
}
103
99
104
- func (w gzipResponseWriter ) Flush () error {
100
+ func (w * gzipResponseWriter ) Flush () error {
105
101
return w .Writer .(* gzip.Writer ).Flush ()
106
102
}
107
103
108
- func (w gzipResponseWriter ) Hijack () (net.Conn , * bufio.ReadWriter , error ) {
104
+ func (w * gzipResponseWriter ) Hijack () (net.Conn , * bufio.ReadWriter , error ) {
109
105
return w .ResponseWriter .(http.Hijacker ).Hijack ()
110
106
}
111
107
112
108
func (w * gzipResponseWriter ) CloseNotify () <- chan bool {
113
109
return w .ResponseWriter .(http.CloseNotifier ).CloseNotify ()
114
110
}
115
-
116
- func gzipPool (config GzipConfig ) sync.Pool {
117
- return sync.Pool {
118
- New : func () interface {} {
119
- w , _ := gzip .NewWriterLevel (ioutil .Discard , config .Level )
120
- return w
121
- },
122
- }
123
- }
0 commit comments