// the find
go-gorm/gorm
The fantastic ORM library for Golang, aims to be developer friendly
GORM is the dominant ORM for Go, handling the full range of SQL operations through struct tags and a chainable API. It targets Go developers who want ActiveRecord-style convenience without writing raw SQL for every query. If you're building a Go web app with a relational database, this is probably what you'll reach for first.
The association handling is genuinely good — preloading, eager loading via joins, and many-to-many all work without much ceremony. Hooks (BeforeCreate, AfterSave, etc.) integrate cleanly and don't require implementing heavy interfaces. The prepared statement cache and DryRun mode are practical features that actually matter in production. Test coverage is extensive and runs against real databases via compose, not mocks.
The 'developer friendly' philosophy means the API accepts almost anything and fails at runtime rather than compile time — a typo in a field name or a wrong struct tag silently produces bad SQL. Update behavior with zero values is a long-standing footgun: db.Save(&user) where a field is 0 or false will zero it out in the DB unless you use Select or map explicitly. Auto-migrations are table-stakes for development but production migrations need external tooling (Atlas, golang-migrate) since GORM can add columns but won't safely drop or alter them. The generic API added in recent versions helps somewhat but the core chainable API still returns *gorm.DB everywhere, which means errors accumulate silently until you call a finisher.