Certificate
Go track certificate: pass criteria, project brief, and a worked example marking sheet.
Go — certificate
EXAMPLE
# ===== Award criteria ===== # Pass: >= 70%; Distinction >= 85%. # # 1. Project structure (10) # 2. Idiomatic Go (15) # 3. Concurrency (15) # 4. Error handling (10) # 5. Testing + benchmarks (15) # 6. HTTP / gRPC service (15) # 7. Build + deploy (Docker) (10) # 8. Communication (10) # ===== Project brief ===== # Ship a small Go service with the following: # - HTTP API (4+ endpoints) using net/http or chi/echo # - Real database (Postgres, MongoDB, or SQLite) # - Structured logging (slog or zerolog) # - Configuration via env vars + flags (Viper or stdlib) # - Graceful shutdown # - Concurrent worker pool for at least one async task # - 70%+ test coverage including table-driven tests # - Multi-stage Dockerfile producing a < 20 MB image # - README with architecture diagram + ops notes # Ideas: URL shortener, blog API, task queue runner, GitHub events ingester, # small chat backend, OAuth callback handler. # ===== Sample structure ===== # myapp/ # cmd/api/main.go (entrypoint) # internal/ # api/ handlers # storage/ db + migrations # pricing/ domain # worker/ async jobs # pkg/ (optional public-ish helpers) # Dockerfile # docker-compose.yml # README.md # go.mod # ===== Marking sheet (example) ===== # 1. Project structure 9/10 cmd + internal layered cleanly # 2. Idiomatic Go 13/15 gofmt clean, small interfaces, errors as values # 3. Concurrency 13/15 bounded worker pool, context cancellation # 4. Error handling 9/10 wrapped with %w, sentinel errors # 5. Testing 13/15 table-driven, benchmarks for hot path # 6. HTTP service 14/15 middleware stack, OpenAPI / swagger # 7. Build + deploy 9/10 multi-stage Dockerfile, distroless, scratch alternative # 8. Communication 9/10 README, ADRs, screenshots # Total: 89/100 -> Distinction # ===== Idiomatic checklist ===== # - errors.Is / errors.As over string comparison # - context.Context as first param of I/O functions # - go fmt + go vet + staticcheck in CI # - Small interfaces (1-3 methods) # - Build constraints for OS-specific code # ===== Patterns to internalise ===== # - cmd/<binary>/main.go layout # - internal/<pkg>/ for private packages # - Errors as values; sentinel errors and wrap with fmt.Errorf # - Graceful shutdown with signal handling # ===== Pitfalls ===== # - god structs holding many responsibilities # - Panics in library code (use error returns) # - No bounded concurrency -> resource exhaustion # - main.go with all the business logic inline
Why it matters
The Go certificate proves you can ship a real Go service: idiomatic structure, concurrency under control, tested, dockerised, documented. Hit the rubric and you have a portfolio repo plus the muscle memory to start the next service from scratch.
Tip: Tweak the snippet with Try it Yourself », then sit the quiz at the bottom of the page.
Discussion
Loading…