スキル一覧に戻る
cemezgin

go-style

by cemezgin

0🍴 0📅 2026年1月17日
GitHubで見るManusで実行

SKILL.md


name: go-style description: Uber Go style guide rules for guidelines, performance, and code style. Use when writing or reviewing Go code for style compliance. userInvokable: true

Go Style (Uber Guide)

References: Uber Go Style Guide | Examples

Guidelines

Examples

RuleDoDon't
Interface pointersfunc(w io.Writer)func(w *io.Writer)
Interface compliancevar _ Interface = (*T)(nil)Runtime check only
ReceiversConsistent pointer (s *Service)Mix value/pointer on same type
Zero-value mutexvar mu sync.Mutex (ready to use)mu := new(sync.Mutex)
Slice/map boundariesCopy at API boundariesReturn/store internal slices/maps
DeferFor cleanup, outside loopsdefer inside loops
Channel size0 (sync) or 1 (async)Arbitrary buffer sizes
EnumsStart at 1 if zero invalidStart at 0 when zero is invalid
Timetime.Time, time.Durationint64 for timestamps/durations
Error typesvar ErrFoo = errors.New()String comparison
Error wrappingfmt.Errorf("...: %w", err)fmt.Errorf("...: %s", err)
Error namingErrFoo, FooError typeFooErr, ErrorFoo
Error handlingHandle once, immediately with :=Log and return, var err at top
Type assertionv, ok := x.(T) check okv := x.(T) panics
Panicmust.Must in cmd/, internal/apps/ onlyPanic in usecases/clients/repos
Atomicgo.uber.org/atomicsync/atomic directly
Global stateDependency injectionMutable globals
EmbeddingPrivate structs onlyEmbed types in public structs
Built-in namesCustom namesShadow error, int, string, etc
init()Avoid, or deterministic onlyComplex logic in init()
Exitos.Exit only in main()os.Exit in library
Field tagsAlways on marshaled structsMissing json: tags
GoroutinesManaged lifecycle, wait groupsFire-and-forget, goroutines in init()

Performance

Examples

RuleDoDon't
Int conversionstrconv.Itoa(n)fmt.Sprintf("%d", n)
String/byteReuse []byte, minimize conversionRepeated []byte(s) in loops
Map capacitymake(map[K]V, hint)Grow map incrementally
Slice capacitymake([]T, 0, cap)Append without capacity

Style

Examples

RuleDoDon't
Line length~99 chars, break logicallyOverly long lines
ConsistencyMatch surrounding code styleMix styles in same file
DeclarationsGroup similar var, const, typeScatter related declarations
Importsstdlib → external → internalMixed import groups
Package namesShort, lowercase, singular_, util, common, base
Function namesMarshalJSON, no stutteringjson.JSONMarshal
Import aliasOnly on conflictUnnecessary aliases
Function orderExported first, by receiver, call orderRandom ordering
NestingEarly return, max 2 levelsDeep nesting
ElseOmit after return/break/continueif x { return } else { ... }
Top-level varvar x = ... not :=:= at package level
Unexported globalsvar _cache = ...var cache (no underscore)
Struct embeddingEmbed interfaces, mutex privateEmbed concrete types publicly
Local var:= for most, var for zerovar x int = 0
Nil sliceReturn nil not []T{}Empty literal when nil works
Variable scopeDeclare near use, reduce scopeAll vars at function top
Naked parametersStruct for 3+ paramsfunc(a, b, c, d, e string)
Raw strings`json:"x"`"json:\"x\""
Struct initField names {Name: "x"}Positional {"x", 1}
Zero fieldsOmit zero value fields{Name: "", Count: 0}
Zero structvar s Ss := S{}
Struct refs&S{Name: "x"}s := S{}; return &s
Map initmake(map[K]V) or literalnil map then assign
Printf formatDefine outside callFormat strings inline
Printf namingFoof(format, ...)FooFormat, FooPrintf
GettersName()GetName()
ConstantsNamed constantsMagic numbers

スコア

総合スコア

45/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

0/5
タグ

1つ以上のタグが設定されている

0/5

レビュー

💬

レビュー機能は近日公開予定です