Skip to main content
Glama
orneryd

M.I.M.I.R - Multi-agent Intelligent Memory & Insight Repository

by orneryd
code-style.md3.3 kB
# Code Style **Coding conventions for NornicDB.** ## Go Formatting Use `gofmt` or `goimports`: ```bash gofmt -w . goimports -w . ``` ## Naming Conventions ### Files - Lowercase with underscores: `db_test.go` - Test files: `*_test.go` - Platform-specific: `*_linux.go`, `*_darwin.go` ### Variables ```go // Local variables: camelCase userName := "alice" // Package-level variables: camelCase or CamelCase var defaultTimeout = 30 * time.Second // Constants: CamelCase const MaxRetries = 3 ``` ### Functions ```go // Exported: CamelCase func CreateUser() {} // Unexported: camelCase func validateInput() {} ``` ### Interfaces ```go // Use -er suffix for single-method interfaces type Reader interface { Read([]byte) (int, error) } // Use descriptive names for multi-method type Engine interface { Get(key []byte) ([]byte, error) Set(key, value []byte) error } ``` ## Error Handling ### Always handle errors ```go // Good result, err := doSomething() if err != nil { return fmt.Errorf("doing something: %w", err) } // Bad - ignoring error result, _ := doSomething() ``` ### Error wrapping ```go // Wrap with context if err != nil { return fmt.Errorf("creating user %s: %w", username, err) } ``` ### Error types ```go // Define package errors var ( ErrNotFound = errors.New("not found") ErrInvalid = errors.New("invalid input") ) ``` ## Comments ### Package comments ```go // Package nornicdb provides a graph database with memory decay. // // NornicDB implements a Neo4j-compatible graph database with // vector search and automatic memory management. package nornicdb ``` ### Function comments ```go // CreateUser creates a new user with the given credentials. // Returns ErrUserExists if the username is already taken. func CreateUser(username, password string) (*User, error) { ``` ### Inline comments ```go // Use sparingly, only when needed func complex() { // Step 1: Validate input if err := validate(); err != nil { return err } // Step 2: Process data // This algorithm is O(n log n) due to... process() } ``` ## Code Organization ### File structure 1. Package declaration 2. Imports (stdlib, then external, then internal) 3. Constants 4. Package variables 5. Types 6. Constructor functions 7. Methods 8. Helper functions ### Import grouping ```go import ( // Standard library "context" "fmt" "time" // External packages "github.com/stretchr/testify/assert" // Internal packages "github.com/orneryd/nornicdb/pkg/storage" ) ``` ## Best Practices ### Use context ```go func DoSomething(ctx context.Context) error { select { case <-ctx.Done(): return ctx.Err() default: // continue } } ``` ### Avoid global state ```go // Bad var globalDB *Database // Good - pass dependencies func NewService(db *Database) *Service { return &Service{db: db} } ``` ### Prefer composition ```go // Good type Server struct { db *Database auth *Authenticator } // Avoid deep inheritance ``` ## Linting Run before committing: ```bash golangci-lint run ``` ## See Also - **[Testing](testing.md)** - Testing guidelines - **[Setup](setup.md)** - Development setup - **[Contributing](../CONTRIBUTING.md)** - Contribution process

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/orneryd/Mimir'

If you have feedback or need assistance with the MCP directory API, please join our Discord server