Let's Go teaches you step-by-step how to create fast, secure and maintainable web applications using the fantastic programming language Go.
The idea behind the book is to help you learn by doing. Together we'll walk through the start-to-finish build of a complete web application — from structuring your workspace, through to session management, authenticating users, securing your server and testing your application.
Building a complete web application has a number of benefits: it helps put the things you're learning into context, demonstrates how different parts of your codebase link together, and forces us to work through the edge-cases and difficulties that come up when writing software in real-life. In essence, you'll learn more that you would by just reading Go's (great) documentation or standalone blog posts.
Although you can read the book cover-to-cover, it's designed specifically for you to follow along and build the application yourself.
Break out your text editor, and happy coding!
Fully updated for Go 1.17!
"The book is brilliant, I’m learning so much from it. It’s definitely the best book I’ve read on developing a non-trivial web app with Go." — John Zanchetta
“I feel like this is the best programming book I've ever read. I came in with a basic understanding of golang relative to web development and this book clearly broke down all the essentials you need to get up to speed with the language in a web dev context.” — Michael Deigl
"If you've completed the Golang intro material but are wondering how to begin writing production apps, I strongly recommend Let's Go. Reading & implementing it took my Go project from spindly spaghetti code to well-structured, testable packages" — Mario Vega
“Thank you for the Golang book you've produced, it was fantastic. Your explanations and walkthrough felt like I was being taught by a veteran over the shoulder. I got exactly what I was expecting and in comparison to other tutorial books this one is leagues ahead.” — Jack Callister
Want to get a feel for the book? Take a look through the free sample.
There are two packages to choose from:
- Let's Go Book - The complete book in HTML, PDF and EPUB format ($34.95).
- Let's Go Professional Package - The complete book in HTML, PDF and EPUB format, plus the full source code from each chapter in the book, printable cheatsheets for net/http and database/sql, and guided exercises to check your understanding ($59.95).
What you'll learn
- All the fundamentals — How to start a server, create handlers, send responses, route requests and serve static files.
- Structure and organization — How to create an idiomatic and scalable structure for your web application.
- Using Modules — How to use Go's new Module functionality to manage and version control your dependencies.
- Managing configuration — How to use command-line flags and dependency injection to manage your application settings.
- Logging and Error Handling — How to implement leveled logging and centralized error handling.
- SQL databases — How to design a database model, set up a connection pool, and execute statements and queries.
- HTML templating — How to cache your templates, display dynamic data, create custom functions and handle runtime errors.
- Middleware — How to create your own middleware to perform common actions (like logging requests and recovering panics).
- RESTful routing — How to create a modern request routing structure that follows the principles of REST.
- Form validation — How to implement reusable and user-friendly pattern for validating forms and displaying errors.
- Session management — How to use and configure sessions to persist data between requests.
- Using HTTPS — How to correctly setup a HTTPS server and configure it for improved performance and security.
- Prevent common vulnerabilities — How to prevent SQL injection, CSRF, XSS, clickjacking and slow-client attacks.
- Authentication and authorization — How to safely encrypt user passwords and add signup, login and logout functionality.
- Request context — How to use Go's context.Context to pass data between your middleware and handlers.
- Testing — How to create unit tests, integration tests and end-to-end tests, mock dependencies and measure test coverage.
- And most importantly… How to put it together in a fully-functioning application!
— 2.1. Installing Go
— 2.2. Repository Setup & Enabling Modules
— 2.3. Web Application Basics
— 2.4. Routing Requests
— 2.5. Customizing HTTP Headers
— 2.6. URL Query Strings
— 2.7. Project Structure and Organization
— 2.8. HTML Templating and Inheritance
— 2.9. Serving Static Files
— 2.10. The http.Handler Interface
3. Configuration and Error Handling
— 3.1. Managing Configuration Settings
— 3.2. Leveled Logging
— 3.3. Dependency Injection
— 3.4. Centralized Error Handling
— 3.5. Isolating the Application Routes
4. Database-Driven Responses
— 4.1. Setting Up MySQL
— 4.2. Installing a Database Driver
— 4.3. Creating a Database Connection Pool
— 4.4. Designing a Database Model
— 4.5. Executing SQL Statements
— 4.6. Single-record SQL Queries
— 4.7. Multiple-record SQL Queries
— 4.8. Transactions and Other Details
5. Dynamic HTML Templates
— 5.1. Displaying Dynamic Data
— 5.2. Template Actions and Functions
— 5.3. Caching Templates
— 5.4. Catching Runtime Errors
— 5.5. Common Dynamic Data
— 5.6. Custom Functions
— 6.1. How Middleware Works
— 6.2. Setting Security Headers
— 6.3. Request Logging
— 6.4. Panic Recovery
— 6.5. Composable Middleware Chains
7. RESTful Routing
— 7.1. Installing a Router
— 7.2. Implementing RESTful Routes
8. Processing Forms
— 8.1. Setting Up a Form
— 8.2. Parsing Form Data
— 8.3. Data Validation
— 8.4. Scaling Data Validation
9. Stateful HTTP
— 9.1. Installing a Session Manager
— 9.2. Setting Up the Session Manager
— 9.3. Working With Session Data
10. Security Improvements
— 10.1. Generating a Self-Signed TLS Certificate
— 10.2. Running a HTTPS Server
— 10.3. Configuring HTTPS Settings
— 10.4. Connection Timeouts
11. User Authentication
— 11.1. Routes Setup
— 11.2. Creating a Users Model
— 11.3. User Signup and Password Encryption
— 11.4. User Login
— 11.5. User Logout
— 11.6. User Authorization
— 11.7. CSRF Protection
12. Using Request Context
— 12.1. How Request Context Works
— 12.2. Request Context for Authentication/Authorization
— 13.1. Unit Testing and Sub-Tests
— 13.2. Testing HTTP Handlers
— 13.3. End-To-End Testing
— 13.4. Mocking Dependencies
— 13.5. Testing HTML Forms
— 13.6. Integration Testing
— 13.7. Profiling Test Coverage
— 5.1. Embedding Files
— 15.2. How HTTPS Works
— 15.3. Useful Links and Further Reading