: Jonathan Calhoun
: 38+ hours
No trivial single-page TODO apps here. Just real, production-grade web apps
- Go is supposed to be great for web development, so why is it so hard to build even a simple twitter clone?
- Why can't anyone point me to a concrete example of how to hash and store user passwords? Or how to build the rest of an authentication system?
- Why is it so frustrating simply trying to figure out how to share my database connection with my handlers, or how to email users without slowing down every web request?
- Can anyone just tell me how to organize my code? Why are there so many varying opinions on this? Which one is right? Should I be using MVC? What is this domain driven design? Ugh! I want to give up!
- You have heard that Go is great for web apps, but getting started leads to so many questions that it can feel overwhelming. But what if you could build a web application this week, starting today? What if you had someone to guide you through the standard libraries and help you understand how they all work together?
"All you need is the standard library" - Everyone on the internet
I can't tell you the number of times I heard this when learning to create web applications using Go. After a while, it started to haunt me.
I started learning Go by reading the standard library and every tutorial I could find, but I quickly ran into a problem.
Rather than creating HTML templates and rendering real dynamic content, we were instead using fmt.Fprint() to print hard coded HTML.
Or when we needed access to a database we would create a global connection and share it with ALL of our code. Yikes!
As a result, I couldn't figure out how to get past creating my first few pages. It was frustrating, to say the least.
While getting stuck I kept asking myself questions like...
- "How do I share my database connection with my handlers?"
- "How do I hash user passwords securely? What is the correct way to make sure a user is authenticated and has access to this resource?"
- "How should I organize my code? Where does the MVC pattern fit into all of this? Is my design RESTful? Will it be hard to maintain?"
- No matter how many tutorials I read, I always felt like there was something left out. Some part of the bigger picture that wasn't explained, leaving me unsure of how to proceed.
The underlying problem was that every single tutorial I read oversimplified things, and what I needed was a comprehensive course showing me how all the pieces worked together.
What you will learn
Here are just a few of the things we will be covering in this course. Everything is taught in the context of our final web application, but we will occasionally review a topic in isolation before looking at how it connects to the rest of our application.
• How to build a web application from scratch
While following along with the book, you will learn how to build everything from the most basic web server and continuously build upon it until you have a fully fledged web application.
• What are MVC and REST?
You will learn all about MVC (model-view-controller) and REST including how using both design principles can make your application significantly easier to maintain and improve as you are learning. Once you understand MVC you will be in a great place to start learning about more advanced design techniques (like domain driven design).
• How to create and utilize templates
Static pages are boring, so we will use the html/template package included in Go's standard library to create HTML pages with dynamic content. This will allow us to display custom dashboards, galleries, and images for each user depending on what page they visit and what they have access to.
• How to build an authentication system
Web Development with Go will teach you how to build a proper authentication system including how to hash passwords with bcrypt, creating user sessions, avoiding timing attacks, and so much more.
If you aren't 100% certain your authentication system is secure, this is a must-read!
• How to interact with a PostgreSQL database
Not only will you learn how to create, update, and delete records using the database/sql package, but we will also cover how to normalize and validate data before saving it to your database. We even cover how to relay validation errors to your end users.
• How to process file uploads
Our photo galleries need images, so we will write all of the code necessary to accept file uploads, process those incoming images, and finally serve them back to end users who visit our galleries.
• How to send emails to users
No matter how smart your users are, some of them are bound to forget their pssword. We will cover how to utilize services like Mailgun to send emails to our customers when this happens, giving them a way to restore access to their account.
• How to use the Dropbox API
If you purchase a package with the bonus content you will also learn how to interact with the Dropbox API, including implementing oauth2 to get access to a user's Dropbox folders and importing images from a user-specified directory to create a photo gallery.
What you will build
Throughout the course you will be building LensLocked, a website where photographers can create photo galleries to share with their clients.
Photographers can sign up, create galleries, and upload photos all from within their dashboard.
After a gallery is completed it can be published, making it publicly accessibly to anyone with the URL and allowing photographers to share their work with their clients.
If you purchase one of the packages with bonus content we will also look at how to let photographers link their Dropbox account and import galleries directly from Dropbox folders, allowing them to skip the annoying task of uploading photos that are already in their Dropbox account.
Samples & Chapter List
Web Development with Go will teach you how to build web applications by guiding you through the process of creating a photo gallery application. The course is broken down into the following chapters. Each chapter varies in length depending on how much material is covered and how many new concepts are being introduced, but they average around 45 pages per chapter in the ebooks, and around 2 hours of screencasts per chapter.
1 - Introduction (sample chapter)
2 - A Basic Web Application (sample chapter)
3 - Adding New Pages (sample chapter)
4 - A Brief Introduction to Templates
5 - Understanding MVC
6 - Creating Our First Views
7 - Creating a Sign Up Page
8 - An Introduction to Databases
9 - Creating the User Model
10 - Building an Authentication System
11 - Remembering Users
12 - Normalizing and Validating Data
13 - Displaying Errors to the End User
14 - Creating the Gallery Resource
15 - Adding Images to Galleries
16 - Preparing for and Deploying to Production
17 - Filling in the gaps (emailing users, resetting passwords, etc)
Order "The Complete Package" or "The Book + Bonus Content" package and you will receive the following bonus content where we use OAuth and the Dropbox API in our app.
18 - Authorizing Dropbox Accounts with the Dropbox API
19 - Importing Images via the Dropbox API*
20 - Creating Galleries with Dropbox Folders*