Choose database/sql for maximum performance and control, sqlx for convenient struct mapping without an ORM, or GORM for rapid development with full ORM features. Use database/sql when you need raw SQL performance and minimal dependencies, sqlx when you want to map rows to structs easily but still write SQL, and GORM when you prefer a high-level API that handles migrations and relationships automatically.
// database/sql: Raw, high-performance, manual mapping
import "database/sql"
db, _ := sql.Open("postgres", "user=foo dbname=bar")
var name string
err := db.QueryRow("SELECT name FROM users WHERE id = $1", 1).Scan(&name)
// sqlx: Struct mapping with named parameters
import "github.com/jmoiron/sqlx"
type User struct { Name string `db:"name"` }
db, _ := sqlx.Connect("postgres", "user=foo dbname=bar")
var user User
err := db.Get(&user, "SELECT * FROM users WHERE id = :id", map[string]interface{}{"id": 1})
// GORM: Full ORM with auto-migrations
import "gorm.io/gorm"
db, _ := gorm.Open(postgres.Open("user=foo dbname=bar"), &gorm.Config{})
type User struct { ID uint; Name string }
db.AutoMigrate(&User{})
db.First(&user, 1)