Database Operations
The Connection Pool That Saved Our Database
func getUserHandler(w http.ResponseWriter, r *http.Request) {
// BAD: New connection per request
db, err := sql.Open("postgres", connectionString)
if err != nil {
http.Error(w, err.Error(), 500)
return
}
defer db.Close() // Too late!
var user User
db.QueryRow("SELECT id, name FROM users WHERE id = $1", userID).Scan(&user.ID, &user.Name)
json.NewEncoder(w).Encode(user)
}The database/sql Package
Supported Drivers
Opening a Connection
Connection Pooling Configuration
Pool Settings
Tuning Guidelines
Real Configuration
Querying Data
Single Row Query
Multiple Rows Query
Query with WHERE Clause
Inserting, Updating, Deleting
Insert
Update
Delete
Prepared Statements
Basic Prepared Statement
When to Use Prepared Statements
Transactions
Basic Transaction
Transaction with Context
Scanning Results
Scanning into Struct
Handling NULL Values
Working with sqlx
Installation
Basic Usage
Named Queries
Working with GORM
Installation
Basic Usage
When to Use GORM
Real Example: Complete User Repository
Your Challenge
Key Takeaways
What I Learned
Last updated