Installation
- System requirements
- Install the Go tools
Tools
- The toolchain
Hello, Go
- Why Go?
Variables & Data structures
- Variables
- Constants
- Elementary types
- Underlying data structures
- Important points
- array, slice, map
Control statements and Functions
- Control statement
- Functions
Struct
- Basics of Struct
Object-oriented
- methods
Interface
- Interface
Concurrency
Managing the Workspace
- Packages
- Internal deployment
Web Programming Basics
- HTTP Methods
- What is a template?
- Static Files
Basic web application
- Handling URLs
- Serving static files
- Homework
Designing our web app
- The Design
- Homework
Using databases in Go
- Creating and configuring database
- Installing sqlite driver
Accessing the database
- Importing driver
Retrieving Result Sets
- Fetching Data from the Database
- How Scan() Works
- Preparing Queries
- Single-Row Queries
Modifying Data and Using Transactions
- Statements that Modify Data
- Working with Transactions
Using Prepared Statements
- Prepared Statements And Connections
- Avoiding Prepared Statements
- Prepared Statements in Transactions
- Parameter Placeholder Syntax
Handling Errors
- Errors From Iterating Resultsets
- Errors From Closing Resultsets
- Errors From QueryRow()
- Identifying Specific Database Errors
- Handling Connection Errors
Working with NULLs
Working with Unknown Columns
The connection pool
Surprises, Antipatterns and Limitations
- Resource Exhaustion
- Large uint64 Values
- Connection State Mismatch
- Database-Specific Syntax
- Multiple Result Sets
- Invoking Stored Procedures
- Multiple Statement Support
Database Encapsulation
An Example
- Homework
Working with Forms
- CSRF
- Input Validation
Uploading files
Templates
- Sub templating
- Homework
Authentication
- Cookies
- Sessions
- Users
Files
Routing
Middlewares
- Example
Building an API
- JWT
- Making an API call
- Formatting a JSON document
- Testing API
Writing an client
- Getting the token
- Error handling
- Example
- Advanced Usage
Unit Testing
Version Control Basics
- Using git
- Branching
- Remote