Course Introduction

From the beginning of the course, you will pair-program with your instructor Bill Kennedy as he walks you through the design philosophies, architectural decisions, and best practices as they apply to engineering a production-ready Go service.

With each new feature that is added to the service, you will learn how to deploy and manage the Kubernetes environment used to run the service. Throughout the class, the code being worked on is pushed to a repository for personal access and review.

Requirements:

  • Studied CS in school or has a minimum of two years of experience programming full time professionally.
  • Familiar with structural and object oriented programming styles.
  • Has worked with arrays, lists, queues and stacks.
  • Understands processes, threads and synchronization at a high level.
  • Operating Systems
    • Has worked with a command shell.
    • Knows how to maneuver around the file system.
    • Understands what environment variables are.
  • Bundle Fee:

    $699
    (Part of Ultimate Go Bundle)

  • Skill Level:

    Intermediate

  • Course Length:

    9+ Hrs

The class goes beyond just the use of the http package and focuses on building CRUD based services with logging, observability and debugging. The class also teaches POD architectures, Docker and cloud deployment. We believe this class is perfect for anyone wishing to build production ready, scalable, fast, and highly concurrent web services in Go.

Course Curriculum

This class teaches how to build production-level services in Go with a focus on macro-level engineering decisions. From the beginning you will pair program with the instructor, walking through the design philosophies and guidelines used to engineer the code.

01.

Introduction

  • 1.0 - Intro
  • 1.1: Design Philosophy, Guidelines, What to Expect
  • 1.2: Tooling to Install

02.

Modules

  • 2.0 - Intro
  • 2.1: Adding Dependencies
  • 2.2: Module Mirrors
  • 2.3: Checksum Database
  • 2.4: Vendoring
  • 2.5: MVS Algorithm

03.

Kubernetes

  • 3.0 - Intro
  • 3.1: Tooling Installation
  • 3.2: Understanding Clusters, Nodes and Pods
  • 3.3: Write Basic Service for Testing
  • 3.4: Zarf Layer
  • 3.4.1: Docker Images
  • 3.4.2: Kind Configuration
  • 3.4.3: Core K8s Configuration
  • 3.4.4: K8s Quotas / Patching

04.

Initial Service Design

  • 4.0 - Intro
  • 4.1: Project Layers, Policies, and Guidelines
  • 4.2: Prepare Project
  • 4.3: Logging Support
  • 4.4: Configuration Support
  • 4.5: Debugging / Metrics Support
  • 4.6: Shutdown Signaling and Load Shedding

05.

HTTP Routing Basics

  • 5.0 - Intro
  • 5.1: Basic Structure of an HTTP Router
  • 5.2: Add a Readiness, Liveness and Test Handler

06.

Web Framework

  • 6.0 - Intro
  • 6.1: Custom Router
  • 6.2: Custom Handler Function
  • 6.3: Middleware Support
  • 6.4: Sending Responses

07.

Middleware

  • 7.0 - Intro
  • 7.1: Logging
  • 7.2: Request Context
  • 7.3: Error Handling
  • 7.3.1: Understanding what Error Handling Means
  • 7.3.2: Declaring Custom Error Types
  • 7.3.3: Consistent Handling and Response
  • 7.4: Panic Handling
  • 7.5: Metrics

08.

JSON Web Tokens (JWT)

  • 8.0 - Intro
  • 8.1: Understanding JWT
  • 8.2: Private/Public Key Generation
  • 8.3: Token Generation
  • 8.4: Token Signature Validation

09.

Authentication / Authorization

  • 9.0 - Intro
  • 9.1: Auth Package
  • 9.2: Implementation of an In-Memory Key Store
  • 9.3: Middleware
  • 9.4: Auth Unit Test

10.

Database Support

  • 10.0 - Intro
  • 10.1: Kubernetes Support for Postgres
  • 10.2: Using Sqlx
  • 10.3: Update Readiness Handler to Perform DB Checks

11.

Database Migrations and Seeding

  • 11.0 - Intro
  • 11.1: Maintaining Database Schemas
  • 11.2: Seeding Data
  • 11.3: Init Containers

12.

Business Packages

  • 12.0 - Intro
  • 12.1: Design Philosophies, Policies, and Guidelines
  • 12.2: User Data Models and API Precision
  • 12.3: Data Model Validation
  • 12.4: User CRUD Data Business Package APIs
  • 12.5: User Core Business Package APIs

13.

Testing Data Business Packages

  • 13.0 - Intro
  • 13.1: Support for Starting and Stopping Containers
  • 13.2: Support for Starting and Stopping a Unit Test
  • 13.3: Write User CRUD Data Unit Tests

14.

REST API

  • 14.0 - Intro
  • 14.1: Writing User Web Handlers
  • 14.2: Support for Starting and Stopping an Integration Test
  • 14.3: Write Integration Tests for Users

15.

Open Telemetry

  • 15.0 - Intro
  • 15.1: Integrate OTEL Web Handler into the Framework
  • 15.2: Integrate OTEL into Service Startup
  • 15.3: Add Zipkin into POD
  • 15.4: Add Tracing Calls Inside Functions to Trace

16.

Review Service Project

  • 16.0 - Intro
  • 16.1: Check For Dependcy Upgrades
  • 16.2: Rebuild and Run the Project

17. Coming Soon

Beyond The Branch

  • 17.0 - Intro
  • 17.1: Introduction
  • 17.2: Handling Log Sync on Error
  • 17.3: Removing DB Driver Types
  • 17.4: New POD for Zipkin
  • 17.5: v1 for Business/Web
  • 17.6: Data and Core Changes