| .dockerignore |
16. Makefile Docker & Deployment |
| .env Files for Local Development |
02. Configuration |
| A Chain Helper |
05. Middleware |
| A Config Struct |
02. Configuration |
| Adding Source Location |
03. Structured Logging with slog |
| Adding Structured Logging |
03. Structured Logging with slog |
| Avoiding Over-Engineering |
01. Project Structure & Setup |
| Benchmarking a Handler |
14. Profiling & Benchmarks |
| Benchmarks with testing.B |
14. Profiling & Benchmarks |
| Beyond HTTP: Shutting Down Background Work |
13. Graceful Shutdown |
| Bookmarks API: Embedded Assets |
12. Embedding with go:embed |
| BookmarkStore |
08. Database with database/sql |
| Catching Signals |
13. Graceful Shutdown |
| Chaining Middleware |
05. Middleware |
| Checking Bookmark URLs |
09. HTTP Client |
| Choosing a Handler |
03. Structured Logging with slog |
| CI/CD |
16. Makefile Docker & Deployment |
| Cleaning Up Resources |
13. Graceful Shutdown |
| Client Configuration |
09. HTTP Client |
| Collecting Profiles |
14. Profiling & Benchmarks |
| Combining Flags and Environment Variables |
02. Configuration |
| Command-Line Flags |
02. Configuration |
| Complete Shutdown Pattern |
13. Graceful Shutdown |
| 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 |
| Cross-Module Workflow |
07. Multi-Module with go work |
| CRUD Operations |
08. Database with database/sql |
| Custom Error Types |
06. Error Handling |
| Database Driver |
08. Database with database/sql |
| Deploying for Real |
16. Makefile Docker & Deployment |
| Deployment Files |
16. Makefile Docker & Deployment |
| Directory Structure |
17. Put It All Together |
| Docker Compose |
16. Makefile Docker & Deployment |
| 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 Limitations |
12. Embedding with go:embed |
| Embedding SQL Migrations |
12. Embedding with go:embed |
| Embedding Templates |
12. Embedding with go:embed |
| Environment Variables |
02. Configuration, 16. Makefile Docker & Deployment |
| Error Handling in Handlers |
06. Error Handling |
| Errors as Values |
06. Error Handling |
| errors.Is and errors.As |
06. Error Handling |
| Escape Analysis |
15. Performance Optimization |
| Flat Layout First |
01. Project Structure & Setup |
| Form Handling |
11. Templates with html/template |
| Frameworks vs net/http |
04. HTTP Routing with net/http |
| Go Workspaces |
07. Multi-Module with go work |
| 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 |
16. Makefile Docker & Deployment |
| http.Server.Shutdown |
13. Graceful Shutdown |
| Immediate Termination |
13. Graceful Shutdown |
| Importing Across Modules |
07. Multi-Module with go work |
| Interface Allocations |
15. Performance Optimization |
| JSON Responses |
04. HTTP Routing with net/http |
| Layouts with Nested Templates |
11. Templates with html/template |
| Lesson-by-Lesson Recap |
17. Put It All Together |
| Logging with Context |
03. Structured Logging with slog |
| Makefile |
16. Makefile Docker & Deployment |
| Measuring the Impact |
15. Performance Optimization |
| Memory Profiles |
14. Profiling & Benchmarks |
| Method and Path Routing |
04. HTTP Routing with net/http |
| Middleware Pattern |
05. Middleware |
| Multi-Stage Dockerfile |
16. Makefile Docker & Deployment |
| Multiple Domains |
01. Project Structure & Setup |
| Opening a Connection |
08. Database with database/sql |
| Panic Recovery |
05. Middleware |
| Panic vs Errors |
06. Error Handling |
| Parsing and Executing |
11. Templates with html/template |
| Passing Data |
11. Templates with html/template |
| Path Parameters |
04. HTTP Routing with net/http |
| pkg Directory |
01. Project Structure & Setup |
| Pre-allocating Slices |
15. Performance Optimization |
| Profiling Workflow |
14. Profiling & Benchmarks |
| Project Benchmarks |
14. Profiling & Benchmarks |
| Project Initialization |
01. Project Structure & Setup |
| Project Overview |
17. Put It All Together |
| Putting It All Together |
16. Makefile Docker & Deployment |
| Raw SQL vs ORMs |
08. Database with database/sql |
| 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 |
| replace Directive Drawbacks |
07. Multi-Module with go work |
| 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 |
17. Put It All Together |
| Runtime Profiling with pprof |
14. Profiling & Benchmarks |
| Security: Auto-Escaping |
11. Templates with html/template |
| Sentinel Errors |
06. Error Handling |
| Separate Shutdown Context |
13. Graceful Shutdown |
| Serving Static Files |
12. Embedding with go:embed |
| Setting Up the Default Logger |
03. Structured Logging with slog |
| strings.Builder for String Concatenation |
15. Performance Optimization |
| Structured vs Unstructured Logging |
03. Structured Logging with slog |
| sync.Pool: Reusing Objects |
15. Performance Optimization |
| t.Error vs t.Fatal |
10. Testing |
| Table-Driven Tests |
10. Testing |
| Template Functions |
11. Templates with html/template |
| Templates vs Frontend Frameworks |
11. Templates with html/template |
| Test File Conventions |
10. Testing |
| Test Helpers |
10. Testing |
| Test the API |
17. Put It All Together |
| testify vs the Standard Library |
10. Testing |
| 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 Default Client Problem |
09. HTTP Client |
| The Optimization Workflow |
15. Performance Optimization |
| The TraceError Pattern |
06. Error Handling |
| Transactions |
08. Database with database/sql |
| Type-Safe Templates with templ |
11. Templates with html/template |
| URL Checker in Bookmark Flow |
09. HTTP Client |
| Useful Flags |
14. Profiling & Benchmarks |
| Useful testing.T Methods |
10. Testing |
| Viper vs Standard Library |
02. Configuration |
| 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) |
17. Put It All Together |
| Without Docker |
17. Put It All Together |
| Wrapping Errors with fmt.Errorf |
06. Error Handling |