Files
2026-03-30 13:39:40 +02:00

1.2 KiB

Go Best Practices

Code Style

  • Use gofmt for formatting
  • Use golint and go vet for linting
  • Follow effective Go guidelines
  • Keep functions short and focused

Error Handling

// GOOD: Check and handle errors
func readConfig(path string) (*Config, error) {
    data, err := os.ReadFile(path)
    if err != nil {
        return nil, fmt.Errorf("reading config: %w", err)
    }

    var config Config
    if err := json.Unmarshal(data, &config); err != nil {
        return nil, fmt.Errorf("parsing config: %w", err)
    }
    return &config, nil
}

// BAD: Ignoring errors
func readConfig(path string) *Config {
    data, _ := os.ReadFile(path)  // Don't ignore errors
    var config Config
    json.Unmarshal(data, &config)
    return &config
}

Concurrency

  • Use channels for communication between goroutines
  • Use sync.WaitGroup for waiting on multiple goroutines
  • Use context.Context for cancellation and timeouts
  • Avoid shared mutable state; prefer message passing

Security

  • Use html/template for HTML output (auto-escaping)
  • Use parameterized queries for SQL
  • Validate all input at API boundaries
  • Use crypto/rand for secure random numbers