go-best-practices

0xbigboss/claude-code · updated Apr 8, 2026

$npx skills add https://github.com/0xbigboss/claude-code --skill go-best-practices
0 commentsdiscussion
summary

Follows type-first, functional, and error handling patterns from CLAUDE.md. This skill covers language-specific idioms only.

skill.md

Go Best Practices

Follows type-first, functional, and error handling patterns from CLAUDE.md. This skill covers language-specific idioms only.

Make Illegal States Unrepresentable

Use Go's type system to prevent invalid states at compile time.

Custom types for domain primitives:

// Distinct types prevent mixing up IDs
type UserID string
type OrderID string

func GetUser(id UserID) (*User, error) {
    // Compiler prevents passing OrderID here
}

// Methods attach behavior to the type
func (id UserID) String() string {
    return string(id)
}

Interfaces for behavior contracts:

// Define what you need, not what you have
type UserRepository interface {
    GetByID(ctx context.Context, id UserID) (*User, error)
    Save(ctx context.Context, user *User) error
}

// Accept interfaces, return structs
func ProcessInput(r io.Reader) ([]byte, error) {
    return io.ReadAll(r)
}

Enums with iota and exhaustive switch:

type Status int

const (
    StatusActive Status = iota + 1
    StatusInactive
    StatusPending
)

func ProcessStatus(s Status) (string, error) {
    switch s {
    case StatusActive:
        return "processing", nil
    case StatusInactive:
        return "skipped", nil
    case StatusPending:
        return "waiting", nil
    default:
        return "", fmt.Errorf("unhandled status: %v", s)
    }
}

Functional options for flexible construction:

type ServerOption func(*Server)

func WithPort(port int) ServerOption {
    return func(s *Server) { s.port = port }
}

func NewServer(opts ...ServerOption) *Server {
    s := &Server{port: 8080, timeout: 30 * time.Second}
    for _, opt := range opts {
        opt(s)
    }
    return s
}
// Usage: NewServer(WithPort(3000), WithTimeout(time.Minute))

Embed for composition:

type Timestamps struct {
    CreatedAt time.Time
    UpdatedAt time.Time
}

type User struct {
    Timestamps  // User gains CreatedAt, UpdatedAt
    ID    UserID
    Email string
}

Go-Specific Error Handling

Wrap errors with %w to preserve the chain for errors.Is / errors.As:

out, err := client.Do(ctx, req)
if err != nil {
    return nil, fmt.Errorf("fetch widget failed: %w", err)
}

Structured Logging

Use log/slog with structured key-value pairs:

import "log/slog"

var log = slog.With("component", "widgets")

func createWidget(name string) (*Widget, error) {
    log.Debug("creating widget", "name", name)
    widget := &Widget{Name: name}
    log.Debug("created widget", "id", widget.ID)
    return widget, nil
}

Discussion

Product Hunt–style comments (not star reviews)
  • No comments yet — start the thread.
general reviews

Ratings

4.642 reviews
  • Camila Lopez· Dec 28, 2024

    go-best-practices has been reliable in day-to-day use. Documentation quality is above average for community skills.

  • William Choi· Dec 16, 2024

    I recommend go-best-practices for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.

  • Sophia Gonzalez· Dec 12, 2024

    Keeps context tight: go-best-practices is the kind of skill you can hand to a new teammate without a long onboarding doc.

  • Dhruvi Jain· Dec 8, 2024

    Useful defaults in go-best-practices — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.

  • Oshnikdeep· Nov 27, 2024

    go-best-practices has been reliable in day-to-day use. Documentation quality is above average for community skills.

  • Luis Gill· Nov 19, 2024

    Useful defaults in go-best-practices — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.

  • Camila Yang· Nov 11, 2024

    We added go-best-practices from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Alexander Shah· Nov 7, 2024

    Solid pick for teams standardizing on skills: go-best-practices is focused, and the summary matches what you get after install.

  • Harper Gonzalez· Nov 3, 2024

    Registry listing for go-best-practices matched our evaluation — installs cleanly and behaves as described in the markdown.

  • Ava Li· Oct 26, 2024

    go-best-practices has been reliable in day-to-day use. Documentation quality is above average for community skills.

showing 1-10 of 42

1 / 5