go-functions — скилл для Claude Code: что делает и как установить
Скилл задаёт правила порядка функций в файле Go, оформления сигнатур и форматирования строк. Пригодится при написании или рефакторинге методов.
npx skills add cxuu/golang-skills --skill go-functions -a claude-codeЧто делает go-functions
Скилл выстраивает функции внутри Go-файла по строгой схеме. Сначала объявляются типы данных, затем идут конструкторы NewXxx, публичные функции, приватные методы и вспомогательные утилиты в самом конце. Методы сортируются примерно по порядку их вызова и группируются по получателю (receiver). Длинные сигнатуры переносятся построчно, где каждый аргумент занимает отдельную строку с запятой на конце.
Правила запрещают передавать указатели на интерфейсы: в Go интерфейсы передаются как значения. Для функций форматирования скилл требует суффикс f в названии — иначе сломается проверка через go vet. При форматировании сообщений об ошибках и логов предписывается использовать глагол %q вместо ручного оборачивания строк через %s, чтобы спецсимволы экранировались безопасно.
Скилл намеренно исключает паттерн функциональных опций и правила обработки ошибок. Если вам нужны конструкторы с опциями вроде WithTimeout, придётся подключить отдельный скилл go-functional-options.
Какие задачи решает
- упорядочить методы и конструкторы внутри Go-файла
- оформить длинную сигнатуру функции с переносом параметров
- настроить имена функций форматирования для проверок go vet
- заменить голые булевы аргументы на отдельные типы
Примеры запросов агенту
- Разбей эту длинную сигнатуру метода в Go по правилам оформления
- Наведи порядок в методах структуры: отсортируй по ресиверу и вызовам
- Оформи функцию форматирования текста с суффиксом для go vet
Как установить go-functions
1Через Skills CLI (Vercel)
npx skills add cxuu/golang-skills --skill go-functions -a claude-code2Вручную: положить файлы
~/.claude/skills/go-functions/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/go-functions/
1Через Skills CLI (Vercel)
npx skills add cxuu/golang-skills --skill go-functions -a codex2Вручную: положить файлы
.agents/skills/go-functions/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add cxuu/golang-skills --skill go-functions -a cursor2Вручную: положить файлы
.cursor/skills/go-functions/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install cxuu/golang-skills go-functions2Вручную: положить файлы
.github/skills/go-functions/SKILL.md1Через Skills CLI (Vercel)
npx skills add cxuu/golang-skills --skill go-functions -a gemini-cli2Командой платформы
gemini skills install https://github.com/cxuu/golang-skills --path skills/go-functionsВручную: положить файлы
.devin/skills/go-functions/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add cxuu/golang-skills --skill go-functions -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора19
Похожие
Рядом в теме «Языки программирования»
Все скиллы по теме «Языки программирования» →Вопросы о go-functions
Как установить go-functions в Claude Code?
Выполните команду npx skills add cxuu/golang-skills --skill go-functions -a claude-code.
Что делает скилл go-functions?
Он задаёт правила структуры Go-файла, переноса параметров в длинных сигнатурах, запрета указателей на интерфейсы и именования функций форматирования.
Подходит ли этот скилл для настройки Functional Options?
Нет, конструкторы вроде WithTimeout исключены из этих правил. Для них предназначен отдельный скилл go-functional-options.
Исходный текст
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