Side-by-side, interactive cheatsheets for Go programmers
comparing Go to other languages. Every example runs live in your browser — no
setup, no installation.
Choose your own path by reordering languages
Where Go programmers go for data, scripting, and getting an idea running in five lines. Python trades Go's static types and compile step for dynamic typing, exceptions, comprehensions, and a vast library ecosystem — the lingua franca of data science and machine learning.
[x*x for x in items if ...] replaces the hand-written map/filter loops Go makes you spell out(value, error) and the endless if err != nil__add__, __repr__) — real OOP and operator overloading, which Go has none ofWhere Go programmers go when they want expressiveness over explicitness. Ruby trades Go's ceremony — error checks after every call, explicit loops, no generics-free verbosity — for blocks, exceptions, and an object model so consistent that even integers have methods.
map, select, reduce built into every collection, replacing Go's hand-written for-range loopsif err != nil; errors propagate until something rescues themString or Integer and add methods at runtime; define methods on the flycase/in destructures arrays and hashes and binds variables in one step, with no manual index checksGo's systems niche without the garbage collector — and with a type system that catches far more at compile time. Rust trades goroutines and GC for ownership, sum-type enums, and Result/Option, eliminating nil-panics and data races before the program ever runs.
iota constants or tagged structs, with exhaustive match the compiler enforcesResult and Option replace (value, error) and nil — the ? operator collapses if err != nil, and there is no null to dereferencemap/filter/fold as zero-cost abstractions, replacing Go's hand-written loopsThe same structural typing you already trust, with the type-level expressiveness Go leaves on the table. TypeScript interfaces are satisfied by shape — exactly like Go's — but the type system adds unions, literal types, and discriminated unions for the sum types Go never grew.
interface by its shape, not by declaring implementsnumber | string) and literal types ("active" | "inactive") express what Go can only fake with any and a type switchtry/catch, not returned as (value, error) — no if err != nil after every callOptimal software with no hidden control flow. Like C but with memory safety, error handling, and compile-time code execution built in.