[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CFNCCRQTDS6B2M8HFJT7MA":3,"skill-same:01M6CFNCCRQTDS6B2M8HFJT7MA":104},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":28,"publishedAt":49,"linkOnly":50,"markdownContent":51,"markdownBody":52,"frontMatter":53,"refName":74,"commitSha":75,"skillDirectory":76,"forksCount":77,"repositoryHtmlUrl":78,"repositoryHomepageUrl":6,"ownerHtmlUrl":79,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":80,"install":81,"resources":93},"01M6CFNCCRQTDS6B2M8HFJT7MA","golang-swagger",null,"Golang OpenAPI\u002FSwagger documentation with swaggo\u002Fswag — annotation comments (@Summary, @Param, @Success, @Router, @Security), swag init code generation, framework integrations (gin, echo, fiber, chi, net\u002Fhttp), security definitions (Bearer\u002FJWT, OAuth2, API key), and struct tags (swaggertype, enums, example, swaggerignore). Apply when adding or maintaining Swagger\u002FOpenAPI docs in a Go project, or when the codebase imports github.com\u002Fswaggo\u002Fswag, github.com\u002Fswaggo\u002Fgin-swagger, github.com\u002Fswaggo\u002Fecho-swagger, github.com\u002Fswaggo\u002Fhttp-swagger, or github.com\u002Fswaggo\u002Ffiles.","rockcookies\u002Fskills","rockcookies","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F3498265?v=4","01M6CF9C16X3SDSKZX6ANH7HQM","Jacob He","01M6CF9C53JP821FCW6R9B00AJ",1,"MIT","https:\u002F\u002Fgithub.com\u002Frockcookies\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fsamber-golang\u002Fgolang-swagger\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],"golang swagger","golang","api","files","Echo","example","router","cmd","integrations","gopls","Bash","MCP","openapi","harness","code","lint","http","documentation","init","codex","2026-11-10 10:12:30",false,"---\nname: golang-swagger\ndescription: >-\n  Golang OpenAPI\u002FSwagger documentation with swaggo\u002Fswag — annotation comments\n  (@Summary, @Param, @Success, @Router, @Security), swag init code generation,\n  framework integrations (gin, echo, fiber, chi, net\u002Fhttp), security definitions\n  (Bearer\u002FJWT, OAuth2, API key), and struct tags (swaggertype, enums, example,\n  swaggerignore). Apply when adding or maintaining Swagger\u002FOpenAPI docs in a Go\n  project, or when the codebase imports github.com\u002Fswaggo\u002Fswag,\n  github.com\u002Fswaggo\u002Fgin-swagger, github.com\u002Fswaggo\u002Fecho-swagger,\n  github.com\u002Fswaggo\u002Fhttp-swagger, or github.com\u002Fswaggo\u002Ffiles.\nuser-invocable: true\nlicense: MIT\ncompatibility: Designed for Claude Code, Codex or similar harness. Requires go and swag CLI.\nmetadata:\n  author: samber\n  version: 1.1.0\n  openclaw:\n    emoji: ?\n    homepage: https:\u002F\u002Fgithub.com\u002Fsamber\u002Fcc-skills-golang\n    requires:\n      bins:\n        - go\n        - swag\n    install:\n      - kind: go\n        package: github.com\u002Fswaggo\u002Fswag\u002Fcmd\u002Fswag@latest\n        bins:\n          - swag\n    skill-library-version: 2.0.0-rc5\nallowed-tools: >-\n  Read Edit Write Glob Grep Bash(go:*) Bash(golangci-lint:*) Bash(git:*) Agent\n  WebFetch mcp__context7__resolve-library-id mcp__context7__query-docs\n  Bash(swag:*) AskUserQuestion Bash(godig:*) Bash(gopls:*) LSP mcp__gopls__*\npaths:\n  - '**\u002F*.go'\n---\n\n**Persona:** You are a Go API documentation engineer. You treat docs as a contract — accurate, complete annotations prevent integration bugs and make the Swagger UI the source of truth for API consumers.\n\n**Modes:**\n\n- **Build** — adding Swagger to a new or existing Go project: set up the toolchain, annotate handlers, generate docs, wire the UI endpoint.\n- **Audit** — reviewing existing swagger annotations for completeness, correctness, and security coverage.\n\n**Dependencies:**\n\n- swag: `go install github.com\u002Fswaggo\u002Fswag\u002Fcmd\u002Fswag@latest`\n\n## Setup\n\nThree steps to get Swagger UI running:\n\n```bash\nswag init                        # generates docs\u002F with docs.go, swagger.json, swagger.yaml\nswag init -g cmd\u002Fapi\u002Fmain.go     # if general info is not in main.go\nswag fmt                         # format annotation comments (like go fmt)\n```\n\nImport the `docs` package to register the spec. Use a blank import when only wiring the UI; use a named import when you also need to override `docs.SwaggerInfo` at runtime:\n\n```go\nimport _ \"yourmodule\u002Fdocs\"          \u002F\u002F blank: registers spec, no identifier\nimport docs \"yourmodule\u002Fdocs\"       \u002F\u002F named: use when overriding SwaggerInfo\n```\n\nWire the UI endpoint — pick your framework:\n\n```go\n\u002F\u002F Gin\nr.GET(\"\u002Fswagger\u002F*any\", ginSwagger.WrapHandler(swaggerFiles.Handler))\n\n\u002F\u002F Echo\ne.GET(\"\u002Fswagger\u002F*\", echoSwagger.WrapHandler)\n\n\u002F\u002F Fiber\napp.Get(\"\u002Fswagger\u002F*\", fiberSwagger.WrapHandler(swaggerFiles.Handler))\n\n\u002F\u002F net\u002Fhttp\nmux.Handle(\"\u002Fswagger\u002F\", httpSwagger.Handler(swaggerFiles.Handler))\n\n\u002F\u002F Chi\nr.Get(\"\u002Fswagger\u002F*\", httpSwagger.Handler(swaggerFiles.Handler))\n```\n\nAccess the UI at `\u002Fswagger\u002Findex.html`.\n\nFor dynamic host\u002Fbasepath (multi-environment), use a named import and override before serving:\n\n```go\nimport docs \"yourmodule\u002Fdocs\"\n\ndocs.SwaggerInfo.Host     = os.Getenv(\"API_HOST\")\ndocs.SwaggerInfo.BasePath = \"\u002Fapi\u002Fv1\"\n```\n\n[Full CLI reference](references\u002Fswag-cli.md)\n\n## General API Info\n\nPlace in `main.go` (or the file passed via `-g`). These annotations define the top-level spec:\n\n```go\n\u002F\u002F @title           My API\n\u002F\u002F @version         1.0\n\u002F\u002F @description     Short description of the API.\n\u002F\u002F @host            localhost:8080\n\u002F\u002F @BasePath        \u002Fapi\u002Fv1\n\u002F\u002F @schemes         http https\n\n\u002F\u002F @contact.name    API Support\n\u002F\u002F @contact.email   support@example.com\n\u002F\u002F @license.name    Apache 2.0\n\n\u002F\u002F @securityDefinitions.apikey Bearer\n\u002F\u002F @in header\n\u002F\u002F @name Authorization\n\u002F\u002F @description Type \"Bearer\" followed by a space and the JWT token.\n```\n\n## Operation Annotations\n\nAnnotate each handler function. The standard doc comment (`\u002F\u002F FuncName godoc`) must precede swag annotations — it anchors indentation for `swag fmt`.\n\n```go\n\u002F\u002F ShowAccount godoc\n\u002F\u002F @Summary      Get account by ID\n\u002F\u002F @Description  Returns account details for the given ID.\n\u002F\u002F @Tags         accounts\n\u002F\u002F @Accept       json\n\u002F\u002F @Produce      json\n\u002F\u002F @Param        id      path  int  true  \"Account ID\"\n\u002F\u002F @Param        filter  query string false \"Optional search filter\"\n\u002F\u002F @Success      200  {object}  model.Account\n\u002F\u002F @Success      204  \"No content\"\n\u002F\u002F @Failure      400  {object}  api.ErrorResponse\n\u002F\u002F @Failure      404  {object}  api.ErrorResponse\n\u002F\u002F @Router       \u002Faccounts\u002F{id} [get]\n\u002F\u002F @Security     Bearer\nfunc ShowAccount(c *gin.Context) {}\n```\n\n**@Param** format: `@Param \u003Cname> \u003Cin> \u003Ctype> \u003Crequired> \"\u003Cdescription>\" [attributes]`\n\n| `\u003Cin>`     | Usage                                |\n| ---------- | ------------------------------------ |\n| `path`     | URL path segment (`\u002Fusers\u002F{id}`)     |\n| `query`    | URL query string (`?filter=x`)       |\n| `body`     | Request body — type must be a struct |\n| `header`   | HTTP header                          |\n| `formData` | Multipart\u002Fform field                 |\n\nOptional attributes on `@Param`: `default(v)`, `minimum(n)`, `maximum(n)`, `minLength(n)`, `maxLength(n)`, `Enums(a,b,c)`, `example(v)`, `collectionFormat(multi)`.\n\n**@Success\u002F@Failure** format: `@Success \u003Ccode> {\u003Ckind>} \u003Ctype> \"\u003Cdescription>\"`\n\n| `\u003Ckind>`             | When             |\n| -------------------- | ---------------- |\n| `{object}`           | Single struct    |\n| `{array}`            | Slice of structs |\n| `string` \u002F `integer` | Primitive        |\n\n**Generics** (swag v2): `@Success 200 {object} api.Response[model.User]`\n\n**Nested composition**: `@Success 200 {object} api.Response{data=model.User}`\n\n## Security Definitions\n\nDefine once at the API level (in main.go), apply per endpoint with `@Security`.\n\n```go\n\u002F\u002F Bearer \u002F JWT\n\u002F\u002F @securityDefinitions.apikey Bearer\n\u002F\u002F @in header\n\u002F\u002F @name Authorization\n\n\u002F\u002F API key in header\n\u002F\u002F @securityDefinitions.apikey ApiKeyAuth\n\u002F\u002F @in header\n\u002F\u002F @name X-API-Key\n\n\u002F\u002F Basic auth\n\u002F\u002F @securityDefinitions.basic BasicAuth\n\n\u002F\u002F OAuth2 authorization code\n\u002F\u002F @securityDefinitions.oauth2.authorizationCode OAuth2\n\u002F\u002F @authorizationUrl https:\u002F\u002Fexample.com\u002Foauth\u002Fauthorize\n\u002F\u002F @tokenUrl https:\u002F\u002Fexample.com\u002Foauth\u002Ftoken\n\u002F\u002F @scope.read Read access\n\u002F\u002F @scope.write Write access\n```\n\nApply to an endpoint:\n\n```go\n\u002F\u002F @Security Bearer\n\u002F\u002F @Security OAuth2[read, write]\n\u002F\u002F @Security BasicAuth && ApiKeyAuth   \u002F\u002F AND — both required\n```\n\n## Struct Tags\n\nEnrich models without changing their Go type:\n\n```go\ntype CreateUserRequest struct {\n    Name   string `json:\"name\" example:\"Jane Doe\" minLength:\"2\" maxLength:\"100\"`\n    Role   string `json:\"role\" enums:\"admin,user,guest\" example:\"user\"`\n    Age    int    `json:\"age\" minimum:\"18\" maximum:\"120\"`\n    Avatar []byte `json:\"avatar\" swaggertype:\"string\" format:\"base64\"`\n    Secret string `json:\"-\" swaggerignore:\"true\"`  \u002F\u002F excluded from docs\n}\n```\n\n| Tag | Purpose |\n| --- | --- |\n| `example` | Example value shown in Swagger UI |\n| `enums` | Comma-separated allowed values |\n| `swaggertype` | Override detected type (e.g., `\"primitive,integer\"` for `time.Time`) |\n| `swaggerignore:\"true\"` | Exclude field from the generated schema |\n| `extensions` | Add OpenAPI extensions: `extensions:\"x-nullable,x-deprecated=true\"` |\n\n## Common Mistakes\n\n| Mistake | Why it breaks | Fix |\n| --- | --- | --- |\n| Missing `_ \"yourmodule\u002Fdocs\"` import | Schema not registered; UI loads empty | Add blank import in main.go or server init |\n| Stale `docs\u002F` after code changes | Docs diverge from implementation; consumers get wrong schema | Re-run `swag init` after every annotation change |\n| `@Param body` with primitive type | swag cannot derive schema from `string`; generation fails | Always use a named struct for body params |\n| No `@Security` on protected routes | Swagger UI shows no lock icon; testers send unauthenticated requests | Apply `@Security` to every authenticated endpoint |\n| General info annotations in the wrong file | swag silently skips them; spec has no title\u002Fhost | Use `-g \u003Cfile>` flag or move annotations to `main.go` |\n| Using `{object}` with a map type | swag cannot generate a schema for `map[string]any` without help | Use a named struct or annotate with `swaggertype` |\n| Multi-word `@Tags` without quotes | Tags split on spaces, producing malformed grouping | Quote tags with spaces: `@Tags \"user accounts\"` |\n\n## Cross-References\n\n- → See `golang-security` for securing the Swagger UI endpoint in production (disable or gate with auth middleware).\n- → See `golang-grpc` for gRPC — use grpc-gateway with its own OpenAPI generator instead of swag.\n\nThis skill is not exhaustive. Refer to the swaggo\u002Fswag documentation and code examples for up-to-date API signatures and usage patterns. For Go package docs, symbols, versions, importers, and known vulnerabilities, → See `golang-pkg-go-dev` skill (`godig`) — prefer it over Context7 for Go package facts. To navigate this library's usage in your own code (definitions, call sites, diagnostics), → See `golang-gopls` skill (`gopls`). Context7 remains a fallback for docs not indexed on pkg.go.dev.\n\nIf you encounter a bug or unexpected behavior in swag, open an issue at \u003Chttps:\u002F\u002Fgithub.com\u002Fswaggo\u002Fswag\u002Fissues>.\n","**Persona:** You are a Go API documentation engineer. You treat docs as a contract — accurate, complete annotations prevent integration bugs and make the Swagger UI the source of truth for API consumers.\n\n**Modes:**\n\n- **Build** — adding Swagger to a new or existing Go project: set up the toolchain, annotate handlers, generate docs, wire the UI endpoint.\n- **Audit** — reviewing existing swagger annotations for completeness, correctness, and security coverage.\n\n**Dependencies:**\n\n- swag: `go install github.com\u002Fswaggo\u002Fswag\u002Fcmd\u002Fswag@latest`\n\n## Setup\n\nThree steps to get Swagger UI running:\n\n```bash\nswag init                        # generates docs\u002F with docs.go, swagger.json, swagger.yaml\nswag init -g cmd\u002Fapi\u002Fmain.go     # if general info is not in main.go\nswag fmt                         # format annotation comments (like go fmt)\n```\n\nImport the `docs` package to register the spec. Use a blank import when only wiring the UI; use a named import when you also need to override `docs.SwaggerInfo` at runtime:\n\n```go\nimport _ \"yourmodule\u002Fdocs\"          \u002F\u002F blank: registers spec, no identifier\nimport docs \"yourmodule\u002Fdocs\"       \u002F\u002F named: use when overriding SwaggerInfo\n```\n\nWire the UI endpoint — pick your framework:\n\n```go\n\u002F\u002F Gin\nr.GET(\"\u002Fswagger\u002F*any\", ginSwagger.WrapHandler(swaggerFiles.Handler))\n\n\u002F\u002F Echo\ne.GET(\"\u002Fswagger\u002F*\", echoSwagger.WrapHandler)\n\n\u002F\u002F Fiber\napp.Get(\"\u002Fswagger\u002F*\", fiberSwagger.WrapHandler(swaggerFiles.Handler))\n\n\u002F\u002F net\u002Fhttp\nmux.Handle(\"\u002Fswagger\u002F\", httpSwagger.Handler(swaggerFiles.Handler))\n\n\u002F\u002F Chi\nr.Get(\"\u002Fswagger\u002F*\", httpSwagger.Handler(swaggerFiles.Handler))\n```\n\nAccess the UI at `\u002Fswagger\u002Findex.html`.\n\nFor dynamic host\u002Fbasepath (multi-environment), use a named import and override before serving:\n\n```go\nimport docs \"yourmodule\u002Fdocs\"\n\ndocs.SwaggerInfo.Host     = os.Getenv(\"API_HOST\")\ndocs.SwaggerInfo.BasePath = \"\u002Fapi\u002Fv1\"\n```\n\n[Full CLI reference](references\u002Fswag-cli.md)\n\n## General API Info\n\nPlace in `main.go` (or the file passed via `-g`). These annotations define the top-level spec:\n\n```go\n\u002F\u002F @title           My API\n\u002F\u002F @version         1.0\n\u002F\u002F @description     Short description of the API.\n\u002F\u002F @host            localhost:8080\n\u002F\u002F @BasePath        \u002Fapi\u002Fv1\n\u002F\u002F @schemes         http https\n\n\u002F\u002F @contact.name    API Support\n\u002F\u002F @contact.email   support@example.com\n\u002F\u002F @license.name    Apache 2.0\n\n\u002F\u002F @securityDefinitions.apikey Bearer\n\u002F\u002F @in header\n\u002F\u002F @name Authorization\n\u002F\u002F @description Type \"Bearer\" followed by a space and the JWT token.\n```\n\n## Operation Annotations\n\nAnnotate each handler function. The standard doc comment (`\u002F\u002F FuncName godoc`) must precede swag annotations — it anchors indentation for `swag fmt`.\n\n```go\n\u002F\u002F ShowAccount godoc\n\u002F\u002F @Summary      Get account by ID\n\u002F\u002F @Description  Returns account details for the given ID.\n\u002F\u002F @Tags         accounts\n\u002F\u002F @Accept       json\n\u002F\u002F @Produce      json\n\u002F\u002F @Param        id      path  int  true  \"Account ID\"\n\u002F\u002F @Param        filter  query string false \"Optional search filter\"\n\u002F\u002F @Success      200  {object}  model.Account\n\u002F\u002F @Success      204  \"No content\"\n\u002F\u002F @Failure      400  {object}  api.ErrorResponse\n\u002F\u002F @Failure      404  {object}  api.ErrorResponse\n\u002F\u002F @Router       \u002Faccounts\u002F{id} [get]\n\u002F\u002F @Security     Bearer\nfunc ShowAccount(c *gin.Context) {}\n```\n\n**@Param** format: `@Param \u003Cname> \u003Cin> \u003Ctype> \u003Crequired> \"\u003Cdescription>\" [attributes]`\n\n| `\u003Cin>`     | Usage                                |\n| ---------- | ------------------------------------ |\n| `path`     | URL path segment (`\u002Fusers\u002F{id}`)     |\n| `query`    | URL query string (`?filter=x`)       |\n| `body`     | Request body — type must be a struct |\n| `header`   | HTTP header                          |\n| `formData` | Multipart\u002Fform field                 |\n\nOptional attributes on `@Param`: `default(v)`, `minimum(n)`, `maximum(n)`, `minLength(n)`, `maxLength(n)`, `Enums(a,b,c)`, `example(v)`, `collectionFormat(multi)`.\n\n**@Success\u002F@Failure** format: `@Success \u003Ccode> {\u003Ckind>} \u003Ctype> \"\u003Cdescription>\"`\n\n| `\u003Ckind>`             | When             |\n| -------------------- | ---------------- |\n| `{object}`           | Single struct    |\n| `{array}`            | Slice of structs |\n| `string` \u002F `integer` | Primitive        |\n\n**Generics** (swag v2): `@Success 200 {object} api.Response[model.User]`\n\n**Nested composition**: `@Success 200 {object} api.Response{data=model.User}`\n\n## Security Definitions\n\nDefine once at the API level (in main.go), apply per endpoint with `@Security`.\n\n```go\n\u002F\u002F Bearer \u002F JWT\n\u002F\u002F @securityDefinitions.apikey Bearer\n\u002F\u002F @in header\n\u002F\u002F @name Authorization\n\n\u002F\u002F API key in header\n\u002F\u002F @securityDefinitions.apikey ApiKeyAuth\n\u002F\u002F @in header\n\u002F\u002F @name X-API-Key\n\n\u002F\u002F Basic auth\n\u002F\u002F @securityDefinitions.basic BasicAuth\n\n\u002F\u002F OAuth2 authorization code\n\u002F\u002F @securityDefinitions.oauth2.authorizationCode OAuth2\n\u002F\u002F @authorizationUrl https:\u002F\u002Fexample.com\u002Foauth\u002Fauthorize\n\u002F\u002F @tokenUrl https:\u002F\u002Fexample.com\u002Foauth\u002Ftoken\n\u002F\u002F @scope.read Read access\n\u002F\u002F @scope.write Write access\n```\n\nApply to an endpoint:\n\n```go\n\u002F\u002F @Security Bearer\n\u002F\u002F @Security OAuth2[read, write]\n\u002F\u002F @Security BasicAuth && ApiKeyAuth   \u002F\u002F AND — both required\n```\n\n## Struct Tags\n\nEnrich models without changing their Go type:\n\n```go\ntype CreateUserRequest struct {\n    Name   string `json:\"name\" example:\"Jane Doe\" minLength:\"2\" maxLength:\"100\"`\n    Role   string `json:\"role\" enums:\"admin,user,guest\" example:\"user\"`\n    Age    int    `json:\"age\" minimum:\"18\" maximum:\"120\"`\n    Avatar []byte `json:\"avatar\" swaggertype:\"string\" format:\"base64\"`\n    Secret string `json:\"-\" swaggerignore:\"true\"`  \u002F\u002F excluded from docs\n}\n```\n\n| Tag | Purpose |\n| --- | --- |\n| `example` | Example value shown in Swagger UI |\n| `enums` | Comma-separated allowed values |\n| `swaggertype` | Override detected type (e.g., `\"primitive,integer\"` for `time.Time`) |\n| `swaggerignore:\"true\"` | Exclude field from the generated schema |\n| `extensions` | Add OpenAPI extensions: `extensions:\"x-nullable,x-deprecated=true\"` |\n\n## Common Mistakes\n\n| Mistake | Why it breaks | Fix |\n| --- | --- | --- |\n| Missing `_ \"yourmodule\u002Fdocs\"` import | Schema not registered; UI loads empty | Add blank import in main.go or server init |\n| Stale `docs\u002F` after code changes | Docs diverge from implementation; consumers get wrong schema | Re-run `swag init` after every annotation change |\n| `@Param body` with primitive type | swag cannot derive schema from `string`; generation fails | Always use a named struct for body params |\n| No `@Security` on protected routes | Swagger UI shows no lock icon; testers send unauthenticated requests | Apply `@Security` to every authenticated endpoint |\n| General info annotations in the wrong file | swag silently skips them; spec has no title\u002Fhost | Use `-g \u003Cfile>` flag or move annotations to `main.go` |\n| Using `{object}` with a map type | swag cannot generate a schema for `map[string]any` without help | Use a named struct or annotate with `swaggertype` |\n| Multi-word `@Tags` without quotes | Tags split on spaces, producing malformed grouping | Quote tags with spaces: `@Tags \"user accounts\"` |\n\n## Cross-References\n\n- → See `golang-security` for securing the Swagger UI endpoint in production (disable or gate with auth middleware).\n- → See `golang-grpc` for gRPC — use grpc-gateway with its own OpenAPI generator instead of swag.\n\nThis skill is not exhaustive. Refer to the swaggo\u002Fswag documentation and code examples for up-to-date API signatures and usage patterns. For Go package docs, symbols, versions, importers, and known vulnerabilities, → See `golang-pkg-go-dev` skill (`godig`) — prefer it over Context7 for Go package facts. To navigate this library's usage in your own code (definitions, call sites, diagnostics), → See `golang-gopls` skill (`gopls`). Context7 remains a fallback for docs not indexed on pkg.go.dev.\n\nIf you encounter a bug or unexpected behavior in swag, open an issue at \u003Chttps:\u002F\u002Fgithub.com\u002Fswaggo\u002Fswag\u002Fissues>.\n",{"name":5,"paths":54,"license":15,"metadata":56,"description":7,"allowed-tools":71,"compatibility":72,"user-invocable":73},[55],"**\u002F*.go",{"author":57,"version":58,"openclaw":59},"samber","1.1.0",{"emoji":60,"install":61,"homepage":67,"requires":68,"skill-library-version":70},"?",[62],{"bins":63,"kind":65,"package":66},[64],"swag","go","github.com\u002Fswaggo\u002Fswag\u002Fcmd\u002Fswag@latest","https:\u002F\u002Fgithub.com\u002Fsamber\u002Fcc-skills-golang",{"bins":69},[65,64],"2.0.0-rc5","Read Edit Write Glob Grep Bash(go:*) Bash(golangci-lint:*) Bash(git:*) Agent WebFetch mcp__context7__resolve-library-id mcp__context7__query-docs Bash(swag:*) AskUserQuestion Bash(godig:*) Bash(gopls:*) LSP mcp__gopls__*","Designed for Claude Code, Codex or similar harness. Requires go and swag CLI.",true,"main","c349be0704bffe54a7191d1412faf564b08983ca","skills\u002Fsamber-golang\u002Fgolang-swagger",0,"https:\u002F\u002Fgithub.com\u002Frockcookies\u002Fskills","https:\u002F\u002Fgithub.com\u002Frockcookies","2026-11-12 14:42:52",{"source":8,"skillName":5,"commands":82,"prompt":92,"zipAvailable":73},[83,86,89],{"tool":84,"command":85},"npx","npx skills add rockcookies\u002Fskills --skill golang-swagger",{"tool":87,"command":88},"bunx","bunx skills add rockcookies\u002Fskills --skill golang-swagger",{"tool":90,"command":91},"pnpm","pnpm dlx skills add rockcookies\u002Fskills --skill golang-swagger","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Frockcookies\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fsamber-golang\u002Fgolang-swagger\u002FSKILL.md",[94,100],{"path":95,"resourceType":96,"resourceTypeDesc":97,"sizeBytes":98,"sourceHtmlUrl":99},"evals\u002Fevals.json","REFERENCE","参考文档",10806,"https:\u002F\u002Fgithub.com\u002Frockcookies\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fsamber-golang\u002Fgolang-swagger\u002Fevals\u002Fevals.json",{"path":101,"resourceType":96,"resourceTypeDesc":97,"sizeBytes":102,"sourceHtmlUrl":103},"references\u002Fswag-cli.md",4617,"https:\u002F\u002Fgithub.com\u002Frockcookies\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fsamber-golang\u002Fgolang-swagger\u002Freferences\u002Fswag-cli.md",[105,128,146,169,180,194],{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":111,"publishedAt":49},"01M6WMNKD3Y4H9FGM8Q901F507","hierarchical-agents-md","层级 AGENTS.md \u002F README.md：init、update、audit、reorganize、trim。 初始化 Agent 指令、代码改动后同步文档、检查文档漂移、重组仓库文档层级、精简规则与 Skills。 Not for 写业务代码或生成文档站点。","https:\u002F\u002Fgithub.com\u002Frockcookies\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcustom\u002Fhierarchical-agents-md\u002FSKILL.md",[],[112,113,114,47,115,116,117,118,119,120,121,122,123,124,125,126,127],"hierarchical agents md","agents md","party","third-party","true","git","packages","change","maintenance","初始化","文档","audit","for","README","update","python",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":137,"publishedAt":49},"01M6CFS6BRTQPFZCDHQP97HYXR","vueuse-functions","Apply VueUse composables where appropriate to build concise, maintainable Vue.js \u002F Nuxt features.","https:\u002F\u002Fgithub.com\u002Frockcookies\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fvueuse\u002Fvueuse-functions\u002FSKILL.md",[134],{"categoryNo":135,"categoryName":136,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[138,139,140,141,142,143,144,145],"functions","vueuse functions","js","vue","https","nuxt","build","github",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":156,"publishedAt":49},"01M6CFS34MDQXZPAWQFE5D7VGT","vue-testing-best-practices","Use for Vue.js testing. Covers Vitest, Vue Test Utils, component testing, mocking, testing patterns, and Playwright for E2E testing.","https:\u002F\u002Fgithub.com\u002Frockcookies\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fvuejs-ai\u002Fvue-testing-best-practices\u002FSKILL.md",[152,155],{"categoryNo":153,"categoryName":154,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":135,"categoryName":136,"taxonomyType":21,"taxonomyTypeDesc":22},[157,141,158,159,160,161,162,163,164,165,145,166,167,168,140],"best practices","testing best practices","testing","vue testing best practices","e2e testing","playwright","test","testing patterns","component","vitest","e2e","use",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":176,"publishedAt":49},"01M6CFS0N19MSJNTVM9AEQ7Z73","vue-router-best-practices","Vue Router 4 patterns, navigation guards, route params, and route-component lifecycle interactions.","https:\u002F\u002Fgithub.com\u002Frockcookies\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fvuejs-ai\u002Fvue-router-best-practices\u002FSKILL.md",[175],{"categoryNo":135,"categoryName":136,"taxonomyType":21,"taxonomyTypeDesc":22},[177,157,141,35,145,165,178,179],"vue router best practices","navigation","lifecycle",{"skillNo":181,"name":182,"nameZh":6,"description":183,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":184,"categories":185,"keywords":187,"publishedAt":49},"01M6CFRYN31RFQFTE41Z6DCGKE","vue-pinia-best-practices","Pinia stores, state management patterns, store setup, and reactivity with stores.","https:\u002F\u002Fgithub.com\u002Frockcookies\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fvuejs-ai\u002Fvue-pinia-best-practices\u002FSKILL.md",[186],{"categoryNo":135,"categoryName":136,"taxonomyType":21,"taxonomyTypeDesc":22},[157,141,188,189,190,191,145,192,193],"vue pinia best practices","pinia","state","state management","management","setup",{"skillNo":195,"name":196,"nameZh":6,"description":197,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":198,"categories":199,"keywords":205,"publishedAt":49},"01M6CFRW2DKXJHP05DYJ3P3Y2S","vue-options-api-best-practices","Vue 3 Options API style (data(), methods, this context). Each reference shows Options API solution only.","https:\u002F\u002Fgithub.com\u002Frockcookies\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fvuejs-ai\u002Fvue-options-api-best-practices\u002FSKILL.md",[200,201,204],{"categoryNo":135,"categoryName":136,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":202,"categoryName":203,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[141,157,206,31,207,208,209,145,210,211],"vue options api best practices","only","data","reference","methods","context"]