{"id":23661086,"url":"https://github.com/kezhengjie/go-http-middleware","last_synced_at":"2026-01-12T06:03:25.690Z","repository":{"id":220305587,"uuid":"751271478","full_name":"kezhengjie/go-http-middleware","owner":"kezhengjie","description":"a simple middleware library for standard go net/http","archived":false,"fork":false,"pushed_at":"2025-06-17T06:05:44.000Z","size":23,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-01T17:44:47.918Z","etag":null,"topics":["go","golang","http","middleware","middleware-integrations","middlewares","standard-library","web"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kezhengjie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-02-01T09:22:43.000Z","updated_at":"2025-06-17T06:05:47.000Z","dependencies_parsed_at":"2024-02-01T11:39:14.407Z","dependency_job_id":"e0b22133-8a0c-41d3-87b2-c608ec61add7","html_url":"https://github.com/kezhengjie/go-http-middleware","commit_stats":null,"previous_names":["alpsmonaco/go-http-middleware","kezhengjie/go-http-middleware"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kezhengjie/go-http-middleware","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kezhengjie%2Fgo-http-middleware","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kezhengjie%2Fgo-http-middleware/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kezhengjie%2Fgo-http-middleware/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kezhengjie%2Fgo-http-middleware/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kezhengjie","download_url":"https://codeload.github.com/kezhengjie/go-http-middleware/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kezhengjie%2Fgo-http-middleware/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28336089,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T00:36:25.062Z","status":"online","status_checked_at":"2026-01-12T02:00:08.677Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","golang","http","middleware","middleware-integrations","middlewares","standard-library","web"],"created_at":"2024-12-29T04:55:43.288Z","updated_at":"2026-01-12T06:03:25.427Z","avatar_url":"https://github.com/kezhengjie.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"[中文文档](https://github.com/AlpsMonaco/go-http-middleware/blob/main/README_zh_CN.md)\n\n# go-http-middleware\nA middleware library for go standard net/http library.  \nDesigned to introduce middleware for net/http with small code modification.  \n\n# Features\n* no more third-party libraries required.\n* core code are easy to learn and understand.\n* fully compatible with the `net/http` library.\n\n\n# Quick Start\n```go\npackage main\n\nimport (\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\n\t\"github.com/AlpsMonaco/go-http-middleware/middleware\"\n)\n\nvar logger = log.New(os.Stdout, \"\", log.LstdFlags)\n\nfunc HttpHandleHello(w http.ResponseWriter, r *http.Request) {\n\tlogger.Println(\"Hello\")\n\tw.Write([]byte(\"Hello\"))\n}\n\nfunc HttpHandleWorld(w http.ResponseWriter, r *http.Request) {\n\tlogger.Println(\"World\")\n\tw.Write([]byte(\"World\"))\n}\n\nfunc LogMiddleware1(next http.HandlerFunc) http.HandlerFunc {\n\treturn func(w http.ResponseWriter, r *http.Request) {\n\t\tlogger.Println(\"log middleware 1 in\")\n\t\tnext(w, r)\n\t\tlogger.Println(\"log middleware 1 out\")\n\t}\n}\n\nfunc LogMiddleware2(next http.HandlerFunc) http.HandlerFunc {\n\treturn func(w http.ResponseWriter, r *http.Request) {\n\t\tlogger.Println(\"log middleware 2 in\")\n\t\tnext(w, r)\n\t\tlogger.Println(\"log middleware 2 out\")\n\t}\n}\n\nfunc main() {\n\thttp := middleware.DefaultHTTPBuilder()\n\thttp.With(LogMiddleware1, LogMiddleware2)\n\thttp.HandleFunc(\"/hello\", HttpHandleHello)\n\thttp.HandleFunc(\"/world\", HttpHandleWorld)\n\thttp.ListenAndServe(\":33333\", nil)\n}\n\n```\nWrite your own middleware and add the following two lines of code before registering the HTTP handler in your code.  \n```go\nhttp := middleware.DefaultHTTPBuilder()\nhttp.With(LogMiddleware1, LogMiddleware2)\n```\nNo further modifications are needed.  \n\n## Test\n```bash\ncurl http://127.0.0.1:33333/hello\n```\nthe console will output \n```\n2024/02/02 14:00:54 log middleware 1 in\n2024/02/02 14:00:54 log middleware 2 in\n2024/02/02 14:00:54 Hello\n2024/02/02 14:00:54 log middleware 2 out\n2024/02/02 14:00:54 log middleware 1 out\n```\n\n\n# Middleware Practice\n\n## Logger Middleware\nlog client addr and request path.\n```go\nfunc LogMiddleware(next http.HandlerFunc) http.HandlerFunc {\n\treturn func(w http.ResponseWriter, r *http.Request) {\n\t\tfmt.Printf(\"%s %s\\n\", r.RemoteAddr, r.RequestURI)\n\t\tnext(w, r)\n\t}\n}\n```\n\n## Timer Middleware\n```go\nfunc TimerMiddleware(next http.HandlerFunc) http.HandlerFunc {\n\treturn func(w http.ResponseWriter, r *http.Request) {\n\t\tst := time.Now()\n\t\tnext(w, r)\n\t\tfmt.Printf(\"time elapsed:%d\\nms\",time.Now().Sub(st).Milliseconds())\n\t}\n}\n```\n\n## Recovery Middleware\nrecover if panic\n```go\nfunc RecoverMiddleware(next http.HandlerFunc) http.HandlerFunc {\n\treturn func(w http.ResponseWriter, r *http.Request) {\n\t\tdefer func() {\n\t\t\terr := recover()\n\t\t\tif err != nil {\n\t\t\t\tw.WriteHeader(500)\n\t\t\t\tfmt.Println(err)\n\t\t\t}\n\t\t}()\n\t\tnext(w, r)\n\t}\n}\n```\n\n# Advance\nUse `middleware.NewBuilder` if you use your own mux instead of default mux of net/http.\n\n```go\n...\nb := middleware.NewBuilder(\u0026http.ServeMux{})\nb.With(LogMiddleware1, LogMiddleware2)\nb.HandleFunc(\"/hello\", HttpHandleHello)\nb.HandleFunc(\"/world\", HttpHandleWorld)\nb.ListenAndServe(\":33333\", nil)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkezhengjie%2Fgo-http-middleware","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkezhengjie%2Fgo-http-middleware","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkezhengjie%2Fgo-http-middleware/lists"}