[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M79Z95FJPHXJ34YTZ73TWF5Z":3,"skill-same:01M79Z95FJPHXJ34YTZ73TWF5Z":52},{"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":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":31,"commitSha":32,"skillDirectory":33,"forksCount":14,"repositoryHtmlUrl":34,"repositoryHomepageUrl":6,"ownerHtmlUrl":35,"ownerBlogUrl":36,"ownerDescription":37,"updatedAt":38,"install":39,"resources":51},"01M79Z95FJPHXJ34YTZ73TWF5Z","go-documentation",null,"Go documentation conventions: godoc comments, package docs, testable Example functions, deprecation notices, and doc links. Use when: \"add godoc\", \"document this package\", \"write doc comments\", \"add examples to docs\", \"deprecate a function\", \"package documentation\", \"improve the docs\". Not for: commit messages (git-commit), README-level guides (plain writing task), code style (go-coding-standards).","kongnakornna\u002Fgolangapi","kongnakornna","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F10528904?v=4","01M79Z5JQPPV5CWQHXS235Q9MD","Kongnakorn Jantakun","01M79Z5JRHJJJ6PR2DGQS4P985",0,"MIT","https:\u002F\u002Fgithub.com\u002Fkongnakornna\u002Fgolangapi\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fgo-agent-skills\u002Fskills\u002F(code-quality)\u002Fgo-documentation\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: go-documentation\ndescription: >\n  Go documentation conventions: godoc comments, package docs, testable\n  Example functions, deprecation notices, and doc links. Use when: \"add\n  godoc\", \"document this package\", \"write doc comments\", \"add examples to\n  docs\", \"deprecate a function\", \"package documentation\", \"improve the\n  docs\".\n  Not for: commit messages (git-commit), README-level guides (plain writing\n  task), code style (go-coding-standards).\nuser-invocable: true\nlicense: MIT\ncompatibility: Designed for Claude Code or similar AI coding agents working on Go projects. Requires the Go toolchain.\nallowed-tools: Read Edit Write Glob Grep Bash(go:*) Bash(gofmt:*)\nmetadata:\n  author: eduardo-sl\n  version: \"1.1.1\"\n---\n\n# Go Documentation\n\nGodoc is not free-form prose — it's a convention the toolchain renders.\nComments that follow the convention become browsable documentation on\npkg.go.dev; comments that don't become noise.\n\n## 1. Doc Comment Form\n\nEvery exported identifier gets a doc comment. It starts with the\nidentifier's name and is a complete sentence:\n\n```go\n\u002F\u002F ✅ Good\n\u002F\u002F ParseDuration parses a duration string such as \"300ms\" or \"2h45m\".\n\u002F\u002F It returns an error if the string is not a valid duration.\nfunc ParseDuration(s string) (Duration, error) { ... }\n\n\u002F\u002F ❌ Bad — doesn't start with the name, fragment, restates signature\n\u002F\u002F this function parses durations\nfunc ParseDuration(s string) (Duration, error) { ... }\n```\n\n- Groups of related constants\u002Fvariables may share one comment on the\n  block: `\u002F\u002F Common HTTP methods.` above the `const (...)` group.\n- Unexported identifiers: comment when the purpose isn't obvious from\n  the name — same form, no obligation.\n- Say what the caller needs: behavior, error conditions, nil\u002Fzero-value\n  handling, concurrency safety. Not the implementation.\n\n## 2. Package Documentation\n\nOne package comment per package, on the `package` clause. For more than\na few sentences, put it in a dedicated `doc.go`:\n\n```go\n\u002F\u002F Package retry implements backoff strategies for retrying failed\n\u002F\u002F operations.\n\u002F\u002F\n\u002F\u002F The zero value of Policy retries three times with exponential\n\u002F\u002F backoff. Use functional options to customize:\n\u002F\u002F\n\u002F\u002F\tp := retry.NewPolicy(retry.WithMaxAttempts(5))\n\u002F\u002F\terr := p.Do(ctx, fetchUser)\npackage retry\n```\n\n- Begins with \"Package \u003Cname> ...\".\n- Indented lines (one tab) render as code blocks.\n- `main` packages: the comment describes the command and its flags —\n  it becomes the command's documentation.\n\n## 3. Doc Links and Formatting (Go 1.19+)\n\n```go\n\u002F\u002F Fetch retrieves the resource. It honors the deadline of ctx and\n\u002F\u002F returns [ErrNotFound] if the resource does not exist.\n\u002F\u002F\n\u002F\u002F For batch retrieval use [Client.FetchAll]. See the [net\u002Fhttp]\n\u002F\u002F package for transport configuration.\nfunc (c *Client) Fetch(ctx context.Context, id string) (*Resource, error)\n```\n\n- `[Name]`, `[Type.Method]`, `[pkg\u002Fpath]` become hyperlinks on pkg.go.dev.\n- A line starting with `# ` is a heading (rare; only in long package docs).\n- Lists: lines starting with a space and a bullet. Keep them shallow.\n\n## 4. Testable Examples\n\nExample functions are documentation the compiler checks. Put them in\n`example_test.go` in the `\u003Cpkg>_test` package:\n\n```go\nfunc ExampleParseDuration() {\n    d, _ := ParseDuration(\"1h30m\")\n    fmt.Println(d.Minutes())\n    \u002F\u002F Output: 90\n}\n\n\u002F\u002F Method example: ExampleType_Method\nfunc ExamplePolicy_Do() { ... }\n\n\u002F\u002F Second example for the same symbol: suffix\nfunc ExampleParseDuration_negative() { ... }\n```\n\n- The `\u002F\u002F Output:` comment makes it a test — `go test` fails if the\n  printed output differs. Examples without it compile but don't run.\n- Write an example for every non-trivial exported API. It renders\n  directly under the symbol on pkg.go.dev.\n\n## 5. Deprecation\n\n```go\n\u002F\u002F Fetch retrieves the resource.\n\u002F\u002F\n\u002F\u002F Deprecated: Use [Client.FetchContext] instead, which honors\n\u002F\u002F context cancellation.\nfunc (c *Client) Fetch(id string) (*Resource, error)\n```\n\n- The paragraph must start exactly with `Deprecated: `.\n- Always name the replacement.\n- Tools (gopls, staticcheck, pkg.go.dev) surface these automatically.\n\n## 6. What NOT to Write\n\n```go\n\u002F\u002F ❌ Noise — restates the code\n\u002F\u002F GetName returns the name.\nfunc (u *User) GetName() string { return u.name }\n\n\u002F\u002F ❌ Maintenance history — belongs in git\n\u002F\u002F Changed 2024-03-01 by alice: added caching.\n\n\u002F\u002F ❌ Commented-out code kept \"for reference\"\n```\n\nIf a doc comment can only restate the signature, improve the name until\nthe comment says something the signature can't — or accept a minimal\ncomment for symmetry in a fully documented API.\n\n## Executable Verification\n\n```bash\ngo vet .\u002F...                  # flags some malformed doc comments\ngofmt -l .                    # Go 1.19+ gofmt normalizes doc comments\ngo test .\u002F...                 # runs Example functions with Output\ngo doc .\u002Fmypkg Symbol         # render what users will actually see\n```\n\nFor a browsable preview, run a local pkgsite if available:\n`go run golang.org\u002Fx\u002Fpkgsite\u002Fcmd\u002Fpkgsite@latest` and open the module.\n\n## Verification Checklist\n\n1. Every exported identifier has a doc comment starting with its name\n2. Package has a package comment (\"Package \u003Cname> ...\"), in doc.go if long\n3. Error conditions and nil\u002Fzero-value behavior documented for exported APIs\n4. Concurrency safety stated where callers could guess wrong\n5. `[Symbol]` doc links used instead of bare names in running text\n6. Non-trivial exported APIs have Example functions with `\u002F\u002F Output:`\n7. Deprecations use the exact `Deprecated: ` form and name a replacement\n8. No comments restating signatures, tracking history, or holding dead code\n9. `go test .\u002F...` passes with examples enabled\n","# Go Documentation\n\nGodoc is not free-form prose — it's a convention the toolchain renders.\nComments that follow the convention become browsable documentation on\npkg.go.dev; comments that don't become noise.\n\n## 1. Doc Comment Form\n\nEvery exported identifier gets a doc comment. It starts with the\nidentifier's name and is a complete sentence:\n\n```go\n\u002F\u002F ✅ Good\n\u002F\u002F ParseDuration parses a duration string such as \"300ms\" or \"2h45m\".\n\u002F\u002F It returns an error if the string is not a valid duration.\nfunc ParseDuration(s string) (Duration, error) { ... }\n\n\u002F\u002F ❌ Bad — doesn't start with the name, fragment, restates signature\n\u002F\u002F this function parses durations\nfunc ParseDuration(s string) (Duration, error) { ... }\n```\n\n- Groups of related constants\u002Fvariables may share one comment on the\n  block: `\u002F\u002F Common HTTP methods.` above the `const (...)` group.\n- Unexported identifiers: comment when the purpose isn't obvious from\n  the name — same form, no obligation.\n- Say what the caller needs: behavior, error conditions, nil\u002Fzero-value\n  handling, concurrency safety. Not the implementation.\n\n## 2. Package Documentation\n\nOne package comment per package, on the `package` clause. For more than\na few sentences, put it in a dedicated `doc.go`:\n\n```go\n\u002F\u002F Package retry implements backoff strategies for retrying failed\n\u002F\u002F operations.\n\u002F\u002F\n\u002F\u002F The zero value of Policy retries three times with exponential\n\u002F\u002F backoff. Use functional options to customize:\n\u002F\u002F\n\u002F\u002F\tp := retry.NewPolicy(retry.WithMaxAttempts(5))\n\u002F\u002F\terr := p.Do(ctx, fetchUser)\npackage retry\n```\n\n- Begins with \"Package \u003Cname> ...\".\n- Indented lines (one tab) render as code blocks.\n- `main` packages: the comment describes the command and its flags —\n  it becomes the command's documentation.\n\n## 3. Doc Links and Formatting (Go 1.19+)\n\n```go\n\u002F\u002F Fetch retrieves the resource. It honors the deadline of ctx and\n\u002F\u002F returns [ErrNotFound] if the resource does not exist.\n\u002F\u002F\n\u002F\u002F For batch retrieval use [Client.FetchAll]. See the [net\u002Fhttp]\n\u002F\u002F package for transport configuration.\nfunc (c *Client) Fetch(ctx context.Context, id string) (*Resource, error)\n```\n\n- `[Name]`, `[Type.Method]`, `[pkg\u002Fpath]` become hyperlinks on pkg.go.dev.\n- A line starting with `# ` is a heading (rare; only in long package docs).\n- Lists: lines starting with a space and a bullet. Keep them shallow.\n\n## 4. Testable Examples\n\nExample functions are documentation the compiler checks. Put them in\n`example_test.go` in the `\u003Cpkg>_test` package:\n\n```go\nfunc ExampleParseDuration() {\n    d, _ := ParseDuration(\"1h30m\")\n    fmt.Println(d.Minutes())\n    \u002F\u002F Output: 90\n}\n\n\u002F\u002F Method example: ExampleType_Method\nfunc ExamplePolicy_Do() { ... }\n\n\u002F\u002F Second example for the same symbol: suffix\nfunc ExampleParseDuration_negative() { ... }\n```\n\n- The `\u002F\u002F Output:` comment makes it a test — `go test` fails if the\n  printed output differs. Examples without it compile but don't run.\n- Write an example for every non-trivial exported API. It renders\n  directly under the symbol on pkg.go.dev.\n\n## 5. Deprecation\n\n```go\n\u002F\u002F Fetch retrieves the resource.\n\u002F\u002F\n\u002F\u002F Deprecated: Use [Client.FetchContext] instead, which honors\n\u002F\u002F context cancellation.\nfunc (c *Client) Fetch(id string) (*Resource, error)\n```\n\n- The paragraph must start exactly with `Deprecated: `.\n- Always name the replacement.\n- Tools (gopls, staticcheck, pkg.go.dev) surface these automatically.\n\n## 6. What NOT to Write\n\n```go\n\u002F\u002F ❌ Noise — restates the code\n\u002F\u002F GetName returns the name.\nfunc (u *User) GetName() string { return u.name }\n\n\u002F\u002F ❌ Maintenance history — belongs in git\n\u002F\u002F Changed 2024-03-01 by alice: added caching.\n\n\u002F\u002F ❌ Commented-out code kept \"for reference\"\n```\n\nIf a doc comment can only restate the signature, improve the name until\nthe comment says something the signature can't — or accept a minimal\ncomment for symmetry in a fully documented API.\n\n## Executable Verification\n\n```bash\ngo vet .\u002F...                  # flags some malformed doc comments\ngofmt -l .                    # Go 1.19+ gofmt normalizes doc comments\ngo test .\u002F...                 # runs Example functions with Output\ngo doc .\u002Fmypkg Symbol         # render what users will actually see\n```\n\nFor a browsable preview, run a local pkgsite if available:\n`go run golang.org\u002Fx\u002Fpkgsite\u002Fcmd\u002Fpkgsite@latest` and open the module.\n\n## Verification Checklist\n\n1. Every exported identifier has a doc comment starting with its name\n2. Package has a package comment (\"Package \u003Cname> ...\"), in doc.go if long\n3. Error conditions and nil\u002Fzero-value behavior documented for exported APIs\n4. Concurrency safety stated where callers could guess wrong\n5. `[Symbol]` doc links used instead of bare names in running text\n6. Non-trivial exported APIs have Example functions with `\u002F\u002F Output:`\n7. Deprecations use the exact `Deprecated: ` form and name a replacement\n8. No comments restating signatures, tracking history, or holding dead code\n9. `go test .\u002F...` passes with examples enabled\n",{"name":5,"license":15,"metadata":24,"description":27,"allowed-tools":28,"compatibility":29,"user-invocable":30},{"author":25,"version":26},"eduardo-sl","1.1.1","Go documentation conventions: godoc comments, package docs, testable Example functions, deprecation notices, and doc links. Use when: \"add godoc\", \"document this package\", \"write doc comments\", \"add examples to docs\", \"deprecate a function\", \"package documentation\", \"improve the docs\". Not for: commit messages (git-commit), README-level guides (plain writing task), code style (go-coding-standards).\n","Read Edit Write Glob Grep Bash(go:*) Bash(gofmt:*)","Designed for Claude Code or similar AI coding agents working on Go projects. Requires the Go toolchain.",true,"main","19f4d52a98d557f3a645a2cfbbeb5bd54f28831d",".github\u002Fskills\u002Fgo-agent-skills\u002Fskills\u002F(code-quality)\u002Fgo-documentation","https:\u002F\u002Fgithub.com\u002Fkongnakornna\u002Fgolangapi","https:\u002F\u002Fgithub.com\u002Fkongnakornna","http:\u002F\u002Fcmoniot.trueddns.com:52160","Technical Skills and Expertise\r\nLanguages and Frameworks\r\nFrontend: HTML, JavaScript, TypeScript, React, Vue, Angular, Next.js\r\nBackend: Node.js,Python,Golang","2026-10-06 23:01:46",{"source":8,"skillName":5,"commands":40,"prompt":50,"zipAvailable":30},[41,44,47],{"tool":42,"command":43},"npx","npx skills add kongnakornna\u002Fgolangapi --skill go-documentation",{"tool":45,"command":46},"bunx","bunx skills add kongnakornna\u002Fgolangapi --skill go-documentation",{"tool":48,"command":49},"pnpm","pnpm dlx skills add kongnakornna\u002Fgolangapi --skill go-documentation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkongnakornna\u002Fgolangapi\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fgo-agent-skills\u002Fskills\u002F(code-quality)\u002Fgo-documentation\u002FSKILL.md",[],[53,61,68,75,82,89],{"skillNo":54,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":57,"licenseFileUrl":6,"sourceHtmlUrl":58,"categories":59,"keywords":60,"publishedAt":19},"01M7A0M9RJJ3383VEFYKABWV15","tb-writing-plans","Use when you have a spec or requirements for a multi-step task, before touching code","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fkongnakornna\u002Fgolangapi\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Ftb-writing-plans\u002FSKILL.md",[],[],{"skillNo":62,"name":63,"nameZh":6,"description":64,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":57,"licenseFileUrl":6,"sourceHtmlUrl":65,"categories":66,"keywords":67,"publishedAt":19},"01M7A0M4JKY4DEDRP1CBHT00WV","tb-using-git-worktrees","Use when starting feature work that needs isolation from current workspace or before executing implementation plans - ensures an isolated workspace exists via native tools or git worktree fallback","https:\u002F\u002Fgithub.com\u002Fkongnakornna\u002Fgolangapi\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Ftb-using-git-worktrees\u002FSKILL.md",[],[],{"skillNo":69,"name":70,"nameZh":6,"description":71,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":57,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":74,"publishedAt":19},"01M7A0KZ5HRAQAAT2KXR6146Q7","tb-test-driven-development","Use when implementing any feature or bugfix, before writing implementation code","https:\u002F\u002Fgithub.com\u002Fkongnakornna\u002Fgolangapi\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Ftb-test-driven-development\u002FSKILL.md",[],[],{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":57,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":19},"01M7A0KW92W3F18E2MRP8H62P2","tb-subagent-driven-development","Use when executing implementation plans with independent tasks in the current session","https:\u002F\u002Fgithub.com\u002Fkongnakornna\u002Fgolangapi\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Ftb-subagent-driven-development\u002FSKILL.md",[],[],{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":57,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":19},"01M7A0KKYQCHYYRHA5J5BAP24M","tb-scrutinize","Outsider-perspective end-to-end review of a plan, PR, or code change. First questions intent and whether a simpler\u002Fmore elegant approach would achieve the same goal, then traces the actual code path (not just the diff) to verify the change does what it claims. Output is concise, actionable, and every call carries its rationale. Trigger on \u002Ftb-scrutinize and proactively whenever the user asks to review, audit, sanity-check, or get a second opinion on a plan, PR, diff, design doc, or proposed code change.","https:\u002F\u002Fgithub.com\u002Fkongnakornna\u002Fgolangapi\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Ftb-scrutinize\u002FSKILL.md",[],[],{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":57,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":19},"01M7A0KFDR1V3RW7SW1XNHP82P","tb-requesting-code-review","Use when completing tasks, implementing major features, or before merging to verify work meets requirements","https:\u002F\u002Fgithub.com\u002Fkongnakornna\u002Fgolangapi\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Ftb-requesting-code-review\u002FSKILL.md",[],[]]