Join 5,000+ Go developers

The best place to learn Go on the internet

Bite-sized lessons, deep courses, and a gamified practice app — everything you need to go from "Hello, World" to production systems.

ByteSizeGo gopher mascot
One useful email at a time — no spam, unsubscribe anytime.
176+interactive exercises
230free blog posts
30+hours of courses
New

Learn Go the Fun Way with GoFlow

Master Go through bite-sized, interactive exercises. Earn XP, build streaks, and level up your skills — one lesson at a time.

  • 176+ interactive exercises you can finish in minutes
  • Earn XP, keep daily streaks, and level up your gopher
  • Real Go code from day one — no setup required
Free to start — no card required
+10 XP
🔥 7⚡ 240 XP
❤️ 5
Fill in the blank
func main() {   msg := "Hello, Gopher!"   fmt.Println(msg) }
fmt.Printlnlog.Fatalprint()
GoFlow Gopher Mascot
Courses

Go deep, one course at a time

Production-focused video courses used by engineers at some of the biggest companies in the world.

Free List

58 Companies Hiring Go Engineers in 2026

Careers pages, remote policies, and how each company uses Go in production.

Google Cloudflare Docker Shopify Datadog HashiCorp +52
Join 5,000+ Go developers
Blog

Latest from the blog

Read all 230 posts →
advanced topicsSep 13, 2026

Reuse http.Transport in Go: Connection Pools, Idle Limits, and Safe Customization

Creating a new http.Transport per request throws away Go's connection pool. A look at pooling, idle limits, and why you have to drain response bodies.

Read More →
advanced topicsSep 12, 2026

Atomic Operations in Go: When a Mutex Is Still Clearer

How to use Go atomic counters, booleans, and atomic.Pointer safely, plus the cases where sync.Mutex is the clearer and more verifiable choice.

Read More →
debuggingSep 11, 2026

Goroutine Leak Profiles in Go 1.27: Finding Permanently Blocked Goroutines

Go 1.27 makes the goroutineleak pprof profile generally available for finding goroutines permanently blocked on channels and sync primitives. Here's how its GC-based detection works and where it stops.

Read More →
advanced topicsSep 10, 2026

Querying the pkg.go.dev API from Go: A Typed Client Walkthrough

pkg.go.dev finally serves JSON. Here's a typed Go client for it, plus the two API design decisions that break naive implementations.

Read More →
advanced topicsSep 9, 2026

Go Error Chains: How errors.Is, errors.As, and errors.Join Actually Work

Go's wrapping contract is three lines of documentation. Here's what falls out of it: sentinel matching, typed extraction, and the multi-error trees errors.Join builds.

Read More →
advanced topicsSep 8, 2026

Worker Pools in Go: Bounded Concurrency Without Goroutine Leaks

A Go worker pool that cancels cleanly, pushes back on the producer, and gets its errors out. Plus how to write a test that proves it didn't leak.

Read More →
Read all 230 blog posts →