| .dockerignore |
15. Makefile Docker & Deployment |
| .env Files for Local Development |
02. Configuration |
| A Chain Helper |
05. Middleware |
| A Config Struct |
02. Configuration |
| A Note on templ |
11. Templates with html/template |
| Adding Benchmarks |
14. Profiling & Benchmarks |
| Adding Source Location |
03. Structured Logging with slog |
| Adding Structured Logging |
03. Structured Logging with slog |
| Benchmarking a Handler |
14. Profiling & Benchmarks |
| Benchmarks with testing.B |
14. Profiling & Benchmarks |
| Beyond HTTP: Shutting Down Background Work |
13. Graceful Shutdown |
| BookmarkStore |
08. Database with database/sql |
| Build a Proper Client |
09. HTTP Client |
| Catching Signals |
13. Graceful Shutdown |
| Chaining Middleware |
05. Middleware |
| Choosing a Handler |
03. Structured Logging with slog |
| CI/CD |
15. Makefile Docker & Deployment |
| Cleaning Up Resources |
13. Graceful Shutdown |
| Collecting Profiles |
14. Profiling & Benchmarks |
| Combining Flags and Environment Variables |
02. Configuration |
| Command-Line Flags |
02. Configuration |
| Conditionals |
11. Templates with html/template |
| Config Struct Integration |
02. Configuration |
| Context Cancellation |
09. HTTP Client |
| Convenience Wrappers |
03. Structured Logging with slog |
| CORS Middleware |
05. Middleware |
| CRUD Operations |
08. Database with database/sql |
| Custom Error Types |
06. Error Handling |
| Database Driver |
08. Database with database/sql |
| Deploying for Real |
15. Makefile Docker & Deployment |
| Deployment Files |
15. Makefile Docker & Deployment |
| Directory Structure |
16. Put It All Together |
| Docker Compose |
15. Makefile Docker & Deployment |
| Don't Over-Engineer |
01. Project Structure & Setup |
| Don't Panic |
06. Error Handling |
| Embed Directive |
12. Embedding with go:embed |
| Embedding a Single File |
12. Embedding with go:embed |
| Embedding Config Files |
12. Embedding with go:embed |
| Embedding Directories with embed.FS |
12. Embedding with go:embed |
| Embedding SQL Migrations |
12. Embedding with go:embed |
| Embedding Templates |
12. Embedding with go:embed |
| Embedding Templates and Static Files |
12. Embedding with go:embed |
| Environment Variables |
02. Configuration, 15. Makefile Docker & Deployment |
| Error Handling in Handlers |
06. Error Handling |
| errors.Is and errors.As |
06. Error Handling |
| Flat Start, Grow When Needed |
01. Project Structure & Setup |
| Form Handling |
11. Templates with html/template |
| go.work Is Not Committed |
07. Multi-Module with go work |
| Goroutine and Block Profiles |
14. Profiling & Benchmarks |
| Graceful Shutdown Integration |
13. Graceful Shutdown |
| Groups |
03. Structured Logging with slog |
| Growing Beyond Flat |
01. Project Structure & Setup |
| Health Checks |
15. Makefile Docker & Deployment |
| How Each Lesson Contributed |
16. Put It All Together |
| http.Server.Shutdown |
13. Graceful Shutdown |
| Importing Across Modules |
07. Multi-Module with go work |
| Initialize the Project |
01. Project Structure & Setup |
| JSON Responses |
04. HTTP Routing with net/http |
| Layouts with Nested Templates |
11. Templates with html/template |
| Logging with Context |
03. Structured Logging with slog |
| Makefile |
15. Makefile Docker & Deployment |
| Memory Profiles |
14. Profiling & Benchmarks |
| Multi-Stage Dockerfile |
15. Makefile Docker & Deployment |
| Multiple Domains |
01. Project Structure & Setup |
| Opening a Connection |
08. Database with database/sql |
| Other useful testing.T methods |
10. Testing |
| Panic Recovery |
05. Middleware |
| Passing Data |
11. Templates with html/template |
| Path Parameters |
04. HTTP Routing with net/http |
| Practical Example: Checking Bookmark URLs |
09. HTTP Client |
| Putting It All Together |
15. Makefile Docker & Deployment |
| Reading JSON Request Bodies |
04. HTTP Routing with net/http |
| Reading Response Bodies |
09. HTTP Client |
| Rendering Bookmarks as HTML |
11. Templates with html/template |
| Rendering in a Handler |
11. Templates with html/template |
| Request ID |
05. Middleware |
| Request Logger |
05. Middleware |
| Required Variables |
02. Configuration |
| Retry with Backoff |
09. HTTP Client |
| Route Organization |
04. HTTP Routing with net/http |
| Route-Specific Middleware |
05. Middleware |
| Running and Building |
07. Multi-Module with go work |
| Running Tests |
10. Testing |
| Running the Final Project |
16. Put It All Together |
| Runtime Profiling with pprof |
14. Profiling & Benchmarks |
| Security: Auto-Escaping |
11. Templates with html/template |
| Sentinel Errors |
06. Error Handling |
| Serving Static Files |
12. Embedding with go:embed |
| Setting Up the Default Logger |
03. Structured Logging with slog |
| t.Error vs t.Fatal |
10. Testing |
| Table-Driven Tests |
10. Testing |
| Template Functions |
11. Templates with html/template |
| Test Helpers |
10. Testing |
| Test the API |
16. Put It All Together |
| Testing Handlers and Store |
10. Testing |
| Testing HTTP Handlers with httptest |
10. Testing |
| Testing Middleware |
10. Testing |
| Testing POST Handlers |
10. Testing |
| Testing Shutdown |
13. Graceful Shutdown |
| Testing the BookmarkStore |
10. Testing |
| The Bookmark Model |
08. Database with database/sql |
| The Complete Pattern |
13. Graceful Shutdown |
| The Default Client Problem |
09. HTTP Client |
| The New Routing (Go 1.22+) |
04. HTTP Routing with net/http |
| The Problem: replace Hacks |
07. Multi-Module with go work |
| The Solution: go work |
07. Multi-Module with go work |
| The TraceError Pattern |
06. Error Handling |
| Transactions |
08. Database with database/sql |
| URL Checker in Bookmark Flow |
09. HTTP Client |
| Useful Flags |
14. Profiling & Benchmarks |
| What About pkg/? |
01. Project Structure & Setup |
| What Each Lesson Contributed |
16. Put It All Together |
| What You Can't Embed |
12. Embedding with go:embed |
| When Templates Aren't Enough |
11. Templates with html/template |
| When to Use Workspaces |
07. Multi-Module with go work |
| Wildcard Matching |
04. HTTP Routing with net/http |
| Wiring the Database |
08. Database with database/sql |
| With Docker Compose (recommended) |
16. Put It All Together |
| Without Docker |
16. Put It All Together |
| Wrapping Errors with fmt.Errorf |
06. Error Handling |