[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EF37MKYM0PPHRAZJ44J33R":3,"skill-same:01M6EF37MKYM0PPHRAZJ44J33R":68},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":21,"linkOnly":22,"markdownContent":23,"markdownBody":23,"frontMatter":24,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":28,"repositoryHtmlUrl":29,"repositoryHomepageUrl":30,"ownerHtmlUrl":31,"ownerBlogUrl":6,"ownerDescription":32,"updatedAt":33,"install":34,"resources":47},"01M6EF37MKYM0PPHRAZJ44J33R","go-echo",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fgo-echo\u002FSKILL.md",[],[18,19,20],"go","Echo","go echo","2026-11-10 10:12:30",false,"# Echo — High-Performance Go Web Framework\n\nYou are an expert in Echo, the high-performance, minimalist Go web framework. You help developers build REST APIs and web applications using Echo's optimized router, middleware chain, data binding, validation, template rendering, and WebSocket support — providing a clean API surface with excellent performance and comprehensive built-in middleware.\n\n## Core Capabilities\n\n### Application Setup\n\n```go\npackage main\n\nimport (\n    \"net\u002Fhttp\"\n    \"github.com\u002Flabstack\u002Fecho\u002Fv4\"\n    \"github.com\u002Flabstack\u002Fecho\u002Fv4\u002Fmiddleware\"\n)\n\nfunc main() {\n    e := echo.New()\n\n    \u002F\u002F Middleware\n    e.Use(middleware.Logger())\n    e.Use(middleware.Recover())\n    e.Use(middleware.CORSWithConfig(middleware.CORSConfig{\n        AllowOrigins: []string{\"https:\u002F\u002Fapp.example.com\"},\n        AllowMethods: []string{http.MethodGet, http.MethodPost, http.MethodPut, http.MethodDelete},\n    }))\n    e.Use(middleware.RateLimiter(middleware.NewRateLimiterMemoryStore(20)))\n\n    \u002F\u002F Routes\n    e.GET(\"\u002Fusers\", listUsers)\n    e.POST(\"\u002Fusers\", createUser)\n    e.GET(\"\u002Fusers\u002F:id\", getUser)\n\n    \u002F\u002F Groups with middleware\n    admin := e.Group(\"\u002Fadmin\", adminAuth)\n    admin.GET(\"\u002Fstats\", getStats)\n\n    e.Logger.Fatal(e.Start(\":3000\"))\n}\n```\n\n### Handlers and Binding\n\n```go\ntype CreateUserRequest struct {\n    Name  string `json:\"name\" validate:\"required,min=2\"`\n    Email string `json:\"email\" validate:\"required,email\"`\n    Age   int    `json:\"age\" validate:\"gte=0,lte=130\"`\n}\n\nfunc createUser(c echo.Context) error {\n    var req CreateUserRequest\n    if err := c.Bind(&req); err != nil {\n        return echo.NewHTTPError(http.StatusBadRequest, \"Invalid request\")\n    }\n    if err := c.Validate(&req); err != nil {\n        return err\n    }\n\n    user, err := db.CreateUser(req.Name, req.Email, req.Age)\n    if err != nil {\n        return echo.NewHTTPError(http.StatusInternalServerError, \"Failed to create user\")\n    }\n\n    return c.JSON(http.StatusCreated, user)\n}\n\nfunc getUser(c echo.Context) error {\n    id := c.Param(\"id\")                   \u002F\u002F Path param\n    user, err := db.FindUser(id)\n    if err != nil {\n        return echo.NewHTTPError(http.StatusNotFound, \"User not found\")\n    }\n    return c.JSON(http.StatusOK, user)\n}\n\nfunc listUsers(c echo.Context) error {\n    page, _ := strconv.Atoi(c.QueryParam(\"page\"))  \u002F\u002F Query param\n    if page \u003C 1 { page = 1 }\n\n    users, total := db.ListUsers(page, 20)\n    return c.JSON(http.StatusOK, map[string]interface{}{\n        \"data\": users, \"total\": total, \"page\": page,\n    })\n}\n```\n\n### JWT Middleware\n\n```go\nimport \"github.com\u002Flabstack\u002Fecho-jwt\u002Fv4\"\n\n\u002F\u002F Configure JWT\ne.Use(echojwt.WithConfig(echojwt.Config{\n    SigningKey: []byte(os.Getenv(\"JWT_SECRET\")),\n    Skipper: func(c echo.Context) bool {\n        return c.Path() == \"\u002Fhealth\" || c.Path() == \"\u002Flogin\"\n    },\n}))\n\n\u002F\u002F Access claims in handler\nfunc getProfile(c echo.Context) error {\n    token := c.Get(\"user\").(*jwt.Token)\n    claims := token.Claims.(jwt.MapClaims)\n    userID := claims[\"user_id\"].(string)\n    \u002F\u002F ...\n}\n```\n\n## Installation\n\n```bash\ngo get github.com\u002Flabstack\u002Fecho\u002Fv4\ngo get github.com\u002Flabstack\u002Fecho-jwt\u002Fv4\n```\n\n## Best Practices\n\n1. **Context methods** — Use `c.Bind()` for request parsing, `c.JSON()` for responses, `c.Param()` \u002F `c.QueryParam()` for params\n2. **Groups for versioning** — `e.Group(\"\u002Fapi\u002Fv1\")` with per-group middleware (auth, rate limiting)\n3. **HTTPError for responses** — Return `echo.NewHTTPError(status, message)` for consistent error responses\n4. **Validator** — Register a custom validator with `e.Validator`; Echo calls it automatically after `Bind()`\n5. **Middleware chaining** — `e.Use()` for global, group-level, or per-route; Echo processes in order\n6. **Graceful shutdown** — Use `e.Shutdown(ctx)` with signal handling; drains active connections\n7. **Custom context** — Extend `echo.Context` for request-scoped data (user, logger, trace ID)\n8. **Static files** — `e.Static(\"\u002Fassets\", \"public\")` for serving static files alongside API routes\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FTerminalSkills\u002Fskills\u002Fgo-echo",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":35,"prompt":45,"zipAvailable":46},[36,39,42],{"tool":37,"command":38},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill go-echo",{"tool":40,"command":41},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill go-echo",{"tool":43,"command":44},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill go-echo","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fgo-echo\u002FSKILL.md",true,[48,54,60,64],{"path":49,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":52,"sourceHtmlUrl":53},"references\u002Fgmail-search-syntax.md","REFERENCE","参考文档",2150,"https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002FWORM_V2_SOVEREIGN\u002Fblob\u002Fmain\u002Fcore\u002Fhermes_sovereign_data\u002Fskills\u002Fproductivity\u002Fgoogle-workspace\u002Freferences\u002Fgmail-search-syntax.md",{"path":55,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":58,"sourceHtmlUrl":59},"scripts\u002Fgoogle_api.py","SCRIPT","脚本",29850,"https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002FWORM_V2_SOVEREIGN\u002Fblob\u002Fmain\u002Fcore\u002Fhermes_sovereign_data\u002Fskills\u002Fproductivity\u002Fgoogle-workspace\u002Fscripts\u002Fgoogle_api.py",{"path":61,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":62,"sourceHtmlUrl":63},"scripts\u002Fgws_bridge.py",3347,"https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002FWORM_V2_SOVEREIGN\u002Fblob\u002Fmain\u002Fcore\u002Fhermes_sovereign_data\u002Fskills\u002Fproductivity\u002Fgoogle-workspace\u002Fscripts\u002Fgws_bridge.py",{"path":65,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":66,"sourceHtmlUrl":67},"scripts\u002Fsetup.py",15139,"https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002FWORM_V2_SOVEREIGN\u002Fblob\u002Fmain\u002Fcore\u002Fhermes_sovereign_data\u002Fskills\u002Fproductivity\u002Fgoogle-workspace\u002Fscripts\u002Fsetup.py",[69,83,93,102,108,115],{"skillNo":70,"name":71,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":79,"publishedAt":21},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[74],{"categoryNo":75,"categoryName":76,"taxonomyType":77,"taxonomyTypeDesc":78},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[80,81,82],"model","model hierarchy","model hierarchy skill",{"skillNo":84,"name":85,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":89,"publishedAt":21},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[88],{"categoryNo":75,"categoryName":76,"taxonomyType":77,"taxonomyTypeDesc":78},[90,91,92],"MCP","zoom","zoom mcp",{"skillNo":94,"name":95,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":21},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[99,100,101,91],"sdk","zoom apps sdk","apps",{"skillNo":103,"name":104,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":107,"publishedAt":21},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[104],{"skillNo":109,"name":110,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":114,"publishedAt":21},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[113],{"categoryNo":75,"categoryName":76,"taxonomyType":77,"taxonomyTypeDesc":78},[110],{"skillNo":116,"name":117,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":21},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[117]]