go-functions — Claude Code skill: what it does, how to install
Organizes Go file structure, formats long function signatures, and enforces Printf naming conventions. Helpful when writing or refactoring Go methods.
npx skills add cxuu/golang-skills --skill go-functions -a claude-codeWhat go-functions does
The skill organizes functions inside a Go file by a strict hierarchy. Types come first, followed by NewXxx constructors, exported functions, unexported functions, and plain utilities at the bottom. Functions are grouped by receiver and arranged in rough call order. When signatures exceed line limits, every parameter wraps onto its own line with a trailing comma.
It prevents passing pointers to interfaces because Go interfaces should pass by value. Format functions must end with the f suffix, or go vet checks will break. For logging and error messages, it mandates %q instead of manual quoting with %s to escape special characters safely.
This skill intentionally omits functional option constructors and error-handling patterns. If your code needs options like WithTimeout, install the separate go-functional-options skill instead.
What it helps with
- organize method declarations and constructors inside a Go file
- format multi-line Go function signatures with trailing commas
- ensure Printf-style functions pass go vet validation
- replace naked boolean function arguments with custom types
Example prompts for the agent
- Reorder the functions in this Go file by receiver and call order
- Format this long Go function signature across multiple lines
- Refactor this Printf-style helper to follow Go formatting standards
How to install go-functions
1Skills CLI (Vercel)
npx skills add cxuu/golang-skills --skill go-functions -a claude-code2Manually: put the files in place
~/.claude/skills/go-functions/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/go-functions/
1Skills CLI (Vercel)
npx skills add cxuu/golang-skills --skill go-functions -a codex2Manually: put the files in place
.agents/skills/go-functions/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add cxuu/golang-skills --skill go-functions -a cursor2Manually: put the files in place
.cursor/skills/go-functions/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install cxuu/golang-skills go-functions2Manually: put the files in place
.github/skills/go-functions/SKILL.md1Skills CLI (Vercel)
npx skills add cxuu/golang-skills --skill go-functions -a gemini-cli2Platform CLI
gemini skills install https://github.com/cxuu/golang-skills --path skills/go-functionsManually: put the files in place
.devin/skills/go-functions/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add cxuu/golang-skills --skill go-functions -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about go-functions
How do I install go-functions in Claude Code?
Run npx skills add cxuu/golang-skills --skill go-functions -a claude-code.
What does go-functions do?
It enforces Go conventions for function layout, signature wrapping, Printf naming for go vet, and interface value passing.
Does go-functions handle functional options constructors?
No, constructors using WithTimeout or WithLogger are handled separately by the go-functional-options skill.
Source text
SKILL.md · Apache-2.0
---
name: go-functions
description: Use when organizing functions within a Go file, formatting function signatures, designing return values, or following Printf-style naming conventions. Also use when a user is adding or refactoring any Go function, even if they don't mention function design or signature formatting. Does not cover functional options constructors (see go-functional-options).
---
# Go Function Design
## Resource Routing
- `references/SIGNATURES.md` - Read when designing parameters, return values, named results, or signature readability.
- `references/PRINTF-STRINGER.md` - Read when using fmt verbs, Stringer, GoStringer, Formatter, or Printf-style function naming.
> **When this skill does NOT apply**: For functional options constructors (`WithTimeout`, `WithLogger`), see [go-functional-options](../go-functional-options/SKILL.md). For error return conventions, see [go-error-handling](../go-error-handling/SKILL.md). For naming functions and methods, see [go-naming](../go-naming/SKILL.md).
---
## Function Grouping and Ordering
Organize functions in a file by these rules:
1. Functions sorted in **rough call order**
2. Functions **grouped by receiver**
3. **Exported** functions appear first, after `struct`/`const`/`var` definitions
4. `NewXxx`/`newXxx` constructors appear right after the type definition
5. Plain utility functions appear toward the end of the file
```go
type something struct{ ... }
func newSomething() *something { return &something{} }
func (s *something) Cost() int { return calcCost(s.weights) }
func (s *something) Stop() { ... }
func calcCost(n []int) int { ... }
```
---
## Function Signatures
Keep the signature on a single line when possible. When it must wrap, put **all
arguments on their own lines** with a trailing comma:
```go
func (r *SomeType) SomeLongFunctionName(
foo1, foo2, foo3 string,
foo4, foo5, foo6 int,
) {
foo7 := bar(foo1)
}
```
Add `/* name */` comments for ambiguous arguments, or better yet, replace naked
`bool` parameters with custom types.
---
## Pointers to Interfaces
You almost never need a pointer to an interface. Pass interfaces as values — the
underlying data can still be a pointer.
```go
// Bad: pointer to interface
func process(r *io.Reader) { ... }
// Good: pass the interface value
func process(r io.Reader) { ... }
```
---
## Printf and Stringer
### Printf-style Function Names
Functions that accept a format string should end in `f` for `go vet` support.
Declare format strings as `const` when used outside `Printf` calls.
Prefer `%q` over `%s` with manual quoting when formatting strings for logging
or error messages — it safely escapes special characters and wraps in quotes:
```go
return fmt.Errorf("unknown key %q", key) // produces: unknown key "foo\nbar"
```
See **go-functional-options** when designing a constructor with 3+ optional
parameters.
---
## Quick Reference
| Topic | Rule |
|-------|------|
| File ordering | Type -> constructor -> exported -> unexported -> utils |
| Signature wrapping | All args on own lines with trailing comma |
| Naked parameters | Add `/* name */` comments or use custom types |
| Pointers to interfaces | Almost never needed; pass interfaces by value |
| Printf function names | End with `f` for `go vet` support |
---
## Related Skills
- **Error returns**: See [go-error-handling](../go-error-handling/SKILL.md) when designing error return patterns or wrapping errors in multi-return functions
- **Naming conventions**: See [go-naming](../go-naming/SKILL.md) when naming functions, methods, or choosing getter/setter patterns
- **Functional options**: See [go-functional-options](../go-functional-options/SKILL.md) when designing a constructor with 3+ optional parameters
- **Formatting principles**: See [go-style-core](../go-style-core/SKILL.md) when deciding line length, naked returns, or signature formatting
© cxuu · Apache-2.0 · cxuu/golang-skills