Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
cxuu avatar

Go Functions

  • 666 installs
  • 137 repo stars
  • Updated June 20, 2026
  • cxuu/golang-skills

go-functions is a Claude Code skill that organizes Go functions, designs signatures, and applies Printf-style naming conventions for developers writing or refactoring functions in Go source files.

About

go-functions is a skill in cxuu/golang-skills for designing and organizing functions within Go files. It routes agents to references/SIGNATURES.md for parameters, return values, named results, and readability, plus references/PRINTF-STRINGER.md for fmt verbs, Stringer, GoStringer, Formatter, and Printf-style naming. The skill triggers when users add or refactor any Go function even without mentioning signature design. It explicitly does not cover functional options constructors, which belong to the separate go-functional-options skill. Developers reach for go-functions when cleaning up Go APIs, standardizing error returns, or aligning logging helpers with idiomatic Printf naming patterns.

  • 4 core ordering rules: rough call order, group by receiver, exported functions first, constructors immediately after typ
  • References SIGNATURES.md for parameter, return value, and named result design
  • References PRINTF-STRINGER.md for fmt verbs, Stringer, and Printf-style naming
  • Applies automatically when adding or refactoring any Go function
  • Hard-gated exclusions for functional options, error handling, and naming (see related skills)

Go Functions by the numbers

  • 666 all-time installs (skills.sh)
  • Ranked #554 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/cxuu/golang-skills --skill go-functions

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs666
repo stars137
Last updatedJune 20, 2026
Repositorycxuu/golang-skills

How do you design idiomatic Go function signatures?

Consistently organize, signature-design, and group functions when writing or refactoring Go code.

Who is it for?

Go developers refactoring or adding functions who want consistent signature design and Printf-style naming across backend packages.

Skip if: Developers implementing functional options constructors, which should use the go-functional-options skill instead of go-functions.

When should I use this skill?

User adds or refactors Go functions, asks about signature design, named returns, Stringer interfaces, or Printf-style function naming.

What you get

Consistently organized Go functions, readable signatures with named returns, and Printf-style Stringer method naming.

  • Refactored Go function signatures
  • Consistent Printf-style method naming

By the numbers

  • Includes two reference guides: SIGNATURES.md and PRINTF-STRINGER.md

Files

SKILL.mdMarkdownGitHub ↗

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. For error return conventions, see go-error-handling. For naming functions and methods, see go-naming.

---

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

TopicRule
File orderingType -> constructor -> exported -> unexported -> utils
Signature wrappingAll args on own lines with trailing comma
Naked parametersAdd /* name */ comments or use custom types
Pointers to interfacesAlmost never needed; pass interfaces by value
Printf function namesEnd with f for go vet support

---

Related Skills

  • Error returns: See go-error-handling when designing error return patterns or wrapping errors in multi-return functions
  • Naming conventions: See go-naming when naming functions, methods, or choosing getter/setter patterns
  • Functional options: See go-functional-options when designing a constructor with 3+ optional parameters
  • Formatting principles: See go-style-core when deciding line length, naked returns, or signature formatting

Related skills

How it compares

Choose go-functions over generic Go style guides when refactoring function signatures and Printf-style naming, not functional options constructors.

FAQ

What reference files does go-functions use?

go-functions routes agents to references/SIGNATURES.md for parameter and return value design, and references/PRINTF-STRINGER.md for fmt verbs, Stringer, GoStringer, and Printf-style naming conventions.

Does go-functions cover functional options in Go?

go-functions does not cover functional options constructors. For option-pattern APIs in Go, use the separate go-functional-options skill in the same cxuu/golang-skills repository.

When should go-functions trigger automatically?

go-functions should trigger when a user adds or refactors any Go function, even if they do not mention signature design. It standardizes organization, return values, and Printf-style naming across backend packages.

Backend & APIsbackendintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.