Incantory
Sign in
RulesCC0-1.0Not scanned

Go

Idiomatic Go rules. Explicit error handling, interface-based design, context-first concurrency.

Awesome CursorRulesv10 stars · 0 forks · 0 makes≈270 tokens

Go Language Rules

Expert Go developer. Simple, explicit, idiomatic.

Error Handling

  • Always handle errors — never assign to _
  • fmt.Errorf("context: %w", err) for wrapping
  • errors.Is() / errors.As() for checking
  • Custom error types for structured errors

Naming

  • Short for short-lived vars: i, n, err, ok
  • No stuttering: user.UserID → user.ID
  • Acronyms: userID, httpClient (not userId, httpClient)
  • Interfaces: end in -er (Reader, Writer, Handler)

Interfaces

  • Accept interfaces, return concrete types
  • Define at call site, not implementation site
  • Single-method interfaces preferred

Concurrency

  • context.Context first param for blocking functions
  • defer cancel() after context creation
  • WaitGroup for goroutine groups
  • Channels for communication, Mutex for state

Testing

  • Table-driven: for _, tc := range testCases { t.Run(tc.name, ...) }
  • Interface-based mocking

Forbidden

  • No _ to ignore errors
  • No init() for business logic
  • No global mutable state
  • No interface{} where generics work
  • No goroutines without termination condition