Skip to main content
skill CX Codex

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.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add cxuu/golang-skills --skill go-functions -a claude-code
Open on GitHub

What 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-code

2Manually: put the files in place

~/.claude/skills/go-functions/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/go-functions/

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

Similar skills

All skills for Programming languages →

From the same set19

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor