Travailler avec les bases de données en Go : PostgreSQL et MongoDB pour débutants
Go (Golang) est un langage compilé moderne qui a gagné en popularité grâce à ses hautes performances, sa simplicité et son support intégré de la concurrence. Lors du développement de services web et d'applications, il est presque toujours nécessaire d'interagir avec des bases de données. Dans cet article, nous verrons comment travailler avec deux SGBD populaires : le relationnel PostgreSQL et l'orienté documents MongoDB. Ce contenu est destiné aux développeurs débutants qui connaissent déjà les bases de Go.
1. Préparation de l'environnement et installation des pilotes
Avant de commencer, assurez-vous d'avoir installé Go (version 1.16+) et que les SGBD correspondants sont en cours d'exécution. Pour travailler avec PostgreSQL, vous aurez besoin du pilote lib/pq, et pour MongoDB, du pilote officiel mongo-go-driver.
go get github.com/lib/pqgo get go.mongodb.org/mongo-driver/mongoCréez un nouveau module :
go mod init example.com/db-demo2. Travailler avec PostgreSQL en Go
PostgreSQL est une base de données relationnelle puissante avec support SQL. En Go, nous utilisons le package standard database/sql avec le pilote lib/pq.
2.1 Connexion à la base de données
Pour se connecter, il faut spécifier la chaîne de connexion (DSN) au format : host=... port=... user=... password=... dbname=... sslmode=disable.
package main
import ( "database/sql" "fmt" "log" _ "github.com/lib/pq")
func main() { connStr := "host=localhost port=5432 user=postgres password=secret dbname=testdb sslmode=disable" db, err := sql.Open("postgres", connStr) if err != nil { log.Fatal(err) } defer db.Close()
err = db.Ping() if err != nil { log.Fatal("Échec de la connexion :", err) } fmt.Println("Connexion à PostgreSQL établie !")}2.2 Création de table et opérations CRUD
Voyons la création de la table users et l'exécution des opérations de base.
// Création de la tablecreateTable := `CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, age INT);`
_, err = db.Exec(createTable)if err != nil { log.Fatal(err)}
// Insertion de donnéessqlInsert := `INSERT INTO users (name, email, age) VALUES ($1, $2, $3) RETURNING id`var userID interr = db.QueryRow(sqlInsert, "Ivan Petrov", "ivan@example.com", 30).Scan(&userID)if err != nil { log.Fatal(err)}fmt.Printf("Utilisateur ajouté avec l'ID : %d", userID)
// Requête de donnéesrows, err := db.Query("SELECT id, name, email, age FROM users")if err != nil { log.Fatal(err)}defer rows.Close()
for rows.Next() { var u struct { ID int Name string Email string Age int } err := rows.Scan(&u.ID, &u.Name, &u.Email, &u.Age) if err != nil { log.Fatal(err) } fmt.Printf("ID : %d, Nom : %s, Email : %s, Âge : %d", u.ID, u.Name, u.Email, u.Age)}2.3 Utilisation des requêtes préparées
Les requêtes préparées (prepared statements) améliorent la sécurité et les performances, en particulier pour les opérations répétitives.
stmt, err := db.Prepare("UPDATE users SET age = $1 WHERE id = $2")if err != nil { log.Fatal(err)}defer stmt.Close()
_, err = stmt.Exec(35, 1)if err != nil { log.Fatal(err)}fmt.Println("Âge de l'utilisateur mis à jour")3. Travailler avec MongoDB en Go
MongoDB est une base de données NoSQL orientée documents. En Go, on travaille avec elle via le pilote officiel mongo-go-driver, qui utilise des contextes pour gérer le temps d'exécution des opérations.
3.1 Connexion à MongoDB
pa