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
262free 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 262 posts →
advanced topicsOct 31, 2026

noalloc: Enforcing Zero Heap Allocations in Go with Static Analysis and Codegen

A look at theconsensuslabs/noalloc: how it reports heap allocations reachable from //noalloc:root functions, and how its jsongen tool uses go/types to generate reflection-free JSON.

Read More →
advanced topicsOct 30, 2026

openhongguo in Go: Signal Handling, Interface Injection, and a JSON Dispatch Table

How the ohg CLI and the openhongguo bindings are wired: NotifyContext for cleanup, consumer-side interfaces, and one JSON dispatch map feeding wasm, Android and iOS.

Read More →
advanced topicsOct 29, 2026

unfairplay in Go: Private File Writes, Symlink Checks, and Binary Parsing

A read through DrWhax/unfairplay: publishing secrets with os.Link instead of os.Rename, rejecting existing symlinks in directory paths, and validating binary input before allocating.

Read More →
advanced topicsOct 28, 2026

Reading agentloop in Go: Immutable Agents, Per-Call Options, and Shell Process Groups

How smhanov/agentloop copies its config on every call, returns a partial Answer alongside an error, and kills runaway shell pipelines with a process-group signal.

Read More →
advanced topicsOct 27, 2026

Go Timers and Tickers: Stop, Reset, and the Go 1.23 Channel Changes

Go 1.23 made timer channels unbuffered. What Stop and Reset guarantee now, why the old drain line blocks forever, and how to write select loops that never see a stale tick.

Read More →
advanced topicsOct 25, 2026

Go Workspaces: Using go.work to Develop Multiple Modules Together

How go.work, go work use, and go work sync let you build and test changes across several Go modules without editing replace directives in go.mod.

Read More →
Read all 262 blog posts →