# Uber Go Style Guide - [Introduction](intro.md) - Guidelines - [Pointers to Interfaces](interface-pointer.md) - [Verify Interface Compliance](interface-compliance.md) - [Receivers and Interfaces](interface-receiver.md) - [Zero-value Mutexes are Valid](mutex-zero-value.md) - [Copy Slices and Maps at Boundaries](container-copy.md) - [Defer to Clean Up](defer-clean.md) - [Channel Size is One or None](channel-size.md) - [Start Enums at One](enum-start.md) - [Use `"time"` to handle time](time.md) - Errors - [Error Types](error-type.md) - [Error Wrapping](error-wrap.md) - [Error Naming](error-name.md) - [Handle Errors Once](error-once.md) - [Handle Type Assertion Failures](type-assert.md) - [Don't Panic](panic.md) - [Use go.uber.org/atomic](atomic.md) - [Avoid Mutable Globals](global-mut.md) - [Avoid Embedding Types in Public Structs](embed-public.md) - [Avoid Using Built-In Names](builtin-name.md) - [Avoid `init()`](init.md) - [Exit in Main](exit-main.md) - [Exit Once](exit-once.md) - [Use field tags in marshaled structs](struct-tag.md) - [Don't fire-and-forget goroutines](goroutine-forget.md) - [Wait for goroutines to exit](goroutine-exit.md) - [No goroutines in `init()`](goroutine-init.md) - [Performance](performance.md) - [Prefer strconv over fmt](strconv.md) - [Avoid repeated string-to-byte conversions](string-byte-slice.md) - [Prefer Specifying Container Capacity](container-capacity.md) - Style - [Avoid overly long lines](line-length.md) - [Be Consistent](consistency.md) - [Group Similar Declarations](decl-group.md) - [Import Group Ordering](import-group.md) - [Package Names](package-name.md) - [Function Names](function-name.md) - [Import Aliasing](import-alias.md) - [Function Grouping and Ordering](function-order.md) - [Reduce Nesting](nest-less.md) - [Unnecessary Else](else-unnecessary.md) - [Top-level Variable Declarations](global-decl.md) - [Prefix Unexported Globals with _](global-name.md) - [Embedding in Structs](struct-embed.md) - [Local Variable Declarations](var-decl.md) - [nil is a valid slice](slice-nil.md) - [Reduce Scope of Variables](var-scope.md) - [Avoid Naked Parameters](param-naked.md) - [Use Raw String Literals to Avoid Escaping](string-escape.md) - Initializing Structs - [Use Field Names to Initialize Structs](struct-field-key.md) - [Omit Zero Value Fields in Structs](struct-field-zero.md) - [Use `var` for Zero Value Structs](struct-zero.md) - [Initializing Struct References](struct-pointer.md) - [Initializing Maps](map-init.md) - [Format Strings outside Printf](printf-const.md) - [Naming Printf-style Functions](printf-name.md) - Patterns - [Test Tables](test-table.md) - [Functional Options](functional-option.md) - [Linting](lint.md)