That’s the true Go developer progression:
>“Why is there no exceptions system?”
>“Why am I writing if err != nil every 14 seconds?”
>“Actually… explicit control flow is kind of beautiful.”
Stockholm syndrome.
You start judging languages that hide errors.
Eventually your fingers evolve into this autonomous organism:
func spirituallyCorrect() error {
x, err := doThing()
if err != nil {
return err
}
y, err := doOtherThing(x)
if err != nil {
return err
}
z, err := doImportantThing(y)
if err != nil {
return err
}
return finalize(z)
}
And then one day you discover:
if err != nil {
return fmt.Errorf("failed to drizzle: %w", err)
}
and suddenly you’re not just coding — you’re crafting artisanal contextualized failures.
Meanwhile every Rust programmer is building a 900-layer trait abstraction so they can avoid writing four lines, and every Java developer is summoning stack traces from the underworld with FactoryBuilderManagerProviderException.
Go just stands there calmly:
>“An error occurred.”
>“Would you like to handle it?”
>“Right here. Right now. Like an adult.”
Peak engineering.