Skip to content
Skill Authoring
Skill

/go-functions

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

BOOST
From plugin
golang-skills
18120 skills
Install
$ npx -y skills add cxuu/golang-skills --skill go-functions --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/go-functions

Context preview

The summary Claude sees to decide when to auto-load this skill.

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

SKILL.md

go-functions.SKILL.md
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

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:

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.

// 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:

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
Read more
Ships withgolang-skills

AI Agent Skills for writing idiomatic, production-quality Go code. 20 modular skills teach AI coding assistants Go best practices derived from: Google Go Style Guide Effective Go Uber Go Style Guide Go Wiki CodeReviewComments Skills are tuned following

Get the whole plugin
Stats
181
Stars
19
Forks
Maintained
Maintenance
HTML
Language
Apache-2.0
License
4mo ago
Last commit
9mo ago
Created
3d ago
Added

Repo: cxuu/golang-skills

Other skills on golang-skills.