Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: vicanso/elton
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v1.2.4
Choose a base ref
...
head repository: vicanso/elton
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: master
Choose a head ref
Loading
Showing with 5,428 additions and 704 deletions.
  1. +7 −13 .github/workflows/test.yml
  2. +2 −1 .gitignore
  3. +0 −3 .vscode/settings.json
  4. +30 −19 README.md
  5. +201 −131 context.go
  6. +91 −5 context_test.go
  7. +6 −0 df.go
  8. +3 −3 docs/context.md
  9. +5 −5 docs/custom_body_parser.md
  10. +4 −3 docs/custom_compress.md
  11. +7 −7 docs/http2_http3.md
  12. +155 −14 docs/middlewares.md
  13. +146 −139 elton.go
  14. +62 −26 elton_test.go
  15. +130 −0 fresh.go
  16. +193 −0 fresh_test.go
  17. +19 −7 go.mod
  18. +27 −20 go.sum
  19. +7 −8 middleware/basic_auth.go
  20. +106 −47 middleware/body_parser.go
  21. +81 −6 middleware/body_parser_test.go
  22. +121 −0 middleware/brotli.go
  23. +451 −0 middleware/cache.go
  24. +166 −0 middleware/cache_compressor.go
  25. +81 −0 middleware/cache_compressor_test.go
  26. +415 −0 middleware/cache_test.go
  27. +41 −15 middleware/compress.go
  28. +21 −11 middleware/compress_test.go
  29. +165 −0 middleware/compressor_test.go
  30. +25 −12 middleware/concurrent_limiter.go
  31. +7 −2 middleware/concurrent_limiter_test.go
  32. +3 −2 middleware/error.go
  33. +1 −1 middleware/error_test.go
  34. +9 −9 middleware/etag.go
  35. +10 −11 middleware/fresh.go
  36. +35 −15 middleware/gzip.go
  37. +233 −0 middleware/http_header.go
  38. +183 −0 middleware/http_header_test.go
  39. +31 −7 middleware/logger.go
  40. +4 −2 middleware/logger_test.go
  41. +93 −0 middleware/lru_store.go
  42. +59 −0 middleware/lru_store_test.go
  43. +46 −0 middleware/prefix_url.go
  44. +63 −0 middleware/prefix_url_test.go
  45. +7 −6 middleware/proxy.go
  46. +4 −3 middleware/proxy_test.go
  47. +3 −1 middleware/recover.go
  48. +1 −1 middleware/recover_test.go
  49. +142 −0 middleware/renderer.go
  50. +141 −0 middleware/renderer_test.go
  51. +13 −12 middleware/responder.go
  52. +16 −3 middleware/responder_test.go
  53. +72 −0 middleware/response_size_limiter.go
  54. +51 −0 middleware/response_size_limiter_test.go
  55. +9 −9 middleware/router_concurrent_limiter.go
  56. +195 −0 middleware/static_embed.go
  57. +64 −0 middleware/static_embed_test.go
  58. +66 −25 middleware/static_serve.go
  59. +1 −1 middleware/static_serve_test.go
  60. +35 −22 middleware/stats.go
  61. +45 −23 middleware/tracker.go
  62. +8 −5 middleware/tracker_test.go
  63. +120 −0 middleware/zstd.go
  64. +129 −0 multipart_form.go
  65. +28 −36 middleware/gzip_test.go → multipart_form_test.go
  66. +7 −7 route_params.go
  67. +6 −6 signed_keys.go
  68. +104 −0 template.go
  69. +78 −0 template_test.go
  70. +175 −0 trace.go
  71. +155 −0 trace_test.go
  72. +106 −0 util.go
  73. +102 −0 util_test.go
20 changes: 7 additions & 13 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -14,26 +14,20 @@ jobs:
strategy:
matrix:
go:
- '1.15'
- '1.14'
- '1.13'
- '1.23'
- '1.22'
- '1.21'
steps:

- name: Check out code into the Go module directory
uses: actions/checkout@v4
- name: Go ${{ matrix.go }} test
uses: actions/setup-go@v2
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go }}

- name: Check out code into the Go module directory
uses: actions/checkout@v2

- name: Get dependencies
run: |
go get -v -t -d ./...
if [ -f Gopkg.toml ]; then
curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
dep ensure
fi
run:
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin latest

- name: Lint
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -2,4 +2,5 @@ vendor
tmp
*.out
examples/*/go.sum
_book
_book
.vscode
3 changes: 0 additions & 3 deletions .vscode/settings.json

This file was deleted.

49 changes: 30 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
@@ -3,11 +3,15 @@
[![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/vicanso/elton/blob/master/LICENSE)
[![Build Status](https://github.com/vicanso/elton/workflows/Test/badge.svg)](https://github.com/vicanso/elton/actions)

![Alt](https://repobeats.axiom.co/api/embed/4f64b99db39c6a75b6980ebb3c756244b246a718.svg "Repobeats analytics image")

Elton的实现参考了[koa](https://github.com/koajs/koa)以及[echo](https://github.com/labstack/echo)中间件的调整均为洋葱模型:请求由外至内,响应由内至外。主要特性如下:
Elton的实现参考了[koa](https://github.com/koajs/koa)以及[echo](https://github.com/labstack/echo)中间件的调用为洋葱模型:请求由外至内,响应由内至外。主要特性如下:

- 处理函数(中间件)均以返回error的形式响应出错,方便使用统一的出错处理中间件将出错统一转换为对应的输出(JSON),并根据出错的类型等生成各类统计分析
- 成功响应数据直接赋值至Context.Body(interface{}),由统一的响应中间件将其转换为对应的输出(JSON,XML)
- 支持不同种类的事件,如`OnBefore``OnDone``OnError`等,方便添加各类统计行为

如何使用`elton`开发WEB后端程序,可以参考[一步一步学习如何使用elton](https://treexie.gitbook.io/elton-beginner/)

## Hello, World!

@@ -120,7 +124,7 @@ e.GET("/users/me", func(c *elton.Context) error {

## 中间件

简单方便的中间件机制,依赖各类定制的中间件,通过各类中间件的组合,方便快捷实现各类HTTP服务,简单介绍数据响应与出错处理的中间件。
简单方便的中间件机制,依赖各类定制的中间件,通过各类中间件的组合,方便快捷实现各类HTTP服务,简单介绍数据响应与出错处理的中间件。需要注意,elton中默认不会执行所有的中间件,每个中间件决定是否需要执行后续处理,如果需要则调用Next()函数,与gin不一样(gin默认为执行所有,若不希望执行后续的中间件,则调用Abort)。

### responder

@@ -207,26 +211,33 @@ func main() {
goos: darwin
goarch: amd64
pkg: github.com/vicanso/elton
BenchmarkRoutes-8 5569852 214 ns/op 152 B/op 3 allocs/op
BenchmarkGetFunctionName-8 124616256 9.61 ns/op 0 B/op 0 allocs/op
BenchmarkContextGet-8 13823508 84.1 ns/op 16 B/op 1 allocs/op
BenchmarkContextNewMap-8 157319816 7.60 ns/op 0 B/op 0 allocs/op
BenchmarkConvertServerTiming-8 1339969 1059 ns/op 360 B/op 11 allocs/op
BenchmarkGetStatus-8 1000000000 0.282 ns/op 0 B/op 0 allocs/op
BenchmarkStatic-8 20527 56061 ns/op 25975 B/op 628 allocs/op
BenchmarkGitHubAPI-8 13024 92207 ns/op 33829 B/op 812 allocs/op
BenchmarkGplusAPI-8 260158 4349 ns/op 2147 B/op 52 allocs/op
BenchmarkParseAPI-8 135792 8433 ns/op 4288 B/op 104 allocs/op
BenchmarkRWMutexSignedKeys-8 75854030 15.9 ns/op 0 B/op 0 allocs/op
BenchmarkAtomicSignedKeys-8 833694663 1.43 ns/op 0 B/op 0 allocs/op
BenchmarkRoutes-8 6925746 169.4 ns/op 120 B/op 2 allocs/op
BenchmarkGetFunctionName-8 136577900 9.265 ns/op 0 B/op 0 allocs/op
BenchmarkContextGet-8 15311328 78.11 ns/op 16 B/op 1 allocs/op
BenchmarkContextNewMap-8 187684261 6.276 ns/op 0 B/op 0 allocs/op
BenchmarkConvertServerTiming-8 1484379 835.8 ns/op 360 B/op 11 allocs/op
BenchmarkGetStatus-8 1000000000 0.2817 ns/op 0 B/op 0 allocs/op
BenchmarkFresh-8 955664 1233 ns/op 416 B/op 10 allocs/op
BenchmarkStatic-8 25128 46709 ns/op 20794 B/op 471 allocs/op
BenchmarkGitHubAPI-8 14724 76190 ns/op 27175 B/op 609 allocs/op
BenchmarkGplusAPI-8 326769 3659 ns/op 1717 B/op 39 allocs/op
BenchmarkParseAPI-8 162340 6989 ns/op 3435 B/op 78 allocs/op
BenchmarkRWMutexSignedKeys-8 71757390 17.51 ns/op 0 B/op 0 allocs/op
BenchmarkAtomicSignedKeys-8 923771157 1.297 ns/op 0 B/op 0 allocs/op
PASS
ok github.com/vicanso/elton 19.403s
ok github.com/vicanso/elton 20.225s
goos: darwin
goarch: amd64
pkg: github.com/vicanso/elton/middleware
BenchmarkGenETag-8 244416 4521 ns/op 280 B/op 7 allocs/op
BenchmarkMd5-8 196239 6011 ns/op 232 B/op 7 allocs/op
BenchmarkProxy-8 14181 76270 ns/op 15840 B/op 105 allocs/op
BenchmarkGenETag-8 230718 4409 ns/op 160 B/op 6 allocs/op
BenchmarkMd5-8 200134 5958 ns/op 120 B/op 6 allocs/op
BenchmarkNewShortHTTPHeader-8 10220961 116.4 ns/op 80 B/op 2 allocs/op
BenchmarkNewHTTPHeader-8 4368654 277.1 ns/op 88 B/op 3 allocs/op
BenchmarkNewHTTPHeaders-8 384062 2822 ns/op 1182 B/op 23 allocs/op
BenchmarkHTTPHeaderMarshal-8 225123 4664 ns/op 1344 B/op 21 allocs/op
BenchmarkToHTTPHeader-8 296210 3834 ns/op 1272 B/op 34 allocs/op
BenchmarkHTTPHeaderUnmarshal-8 120136 10108 ns/op 1888 B/op 50 allocs/op
BenchmarkProxy-8 13393 85170 ns/op 16031 B/op 104 allocs/op
PASS
ok github.com/vicanso/elton/middleware 5.429s
ok github.com/vicanso/elton/middleware 14.007s
```
Loading