En aquest tema, aprendrem a realitzar operacions CRUD (Create, Read, Update, Delete) en una base de dades utilitzant Go. Aquestes operacions són fonamentals per a la majoria d'aplicacions que treballen amb dades persistents.
Objectius
- Entendre què són les operacions CRUD.
- Aprendre a connectar-se a una base de dades des de Go.
- Implementar operacions de creació, lectura, actualització i eliminació en una base de dades.
Requisits Previs
- Coneixements bàsics de Go.
- Coneixements bàsics de bases de dades SQL.
- Haver completat el tema anterior sobre connexió a una base de dades.
Contingut
Introducció a les Operacions CRUD
Les operacions CRUD són les operacions bàsiques que es poden realitzar en una base de dades. Aquestes operacions són:
- Create (Crear): Inserir noves dades a la base de dades.
- Read (Llegir): Recuperar dades de la base de dades.
- Update (Actualitzar): Modificar dades existents a la base de dades.
- Delete (Eliminar): Eliminar dades de la base de dades.
Configuració de la Base de Dades
Abans de començar amb les operacions CRUD, necessitem configurar la connexió a la base de dades. Utilitzarem una base de dades SQLite per a aquest exemple.
Exemple de Connexió a SQLite
package main
import (
"database/sql"
"log"
_ "github.com/mattn/go-sqlite3"
)
func main() {
db, err := sql.Open("sqlite3", "./example.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// Creació de la taula
createTableSQL := `CREATE TABLE IF NOT EXISTS users (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"name" TEXT,
"age" INTEGER
);`
_, err = db.Exec(createTableSQL)
if err != nil {
log.Fatal(err)
}
}Creació d'Operacions CRUD
Create (Crear)
Per inserir noves dades a la base de dades, utilitzem l'operació INSERT.
Exemple de Codi
func createUser(db *sql.DB, name string, age int) {
insertUserSQL := `INSERT INTO users (name, age) VALUES (?, ?)`
statement, err := db.Prepare(insertUserSQL)
if err != nil {
log.Fatal(err)
}
defer statement.Close()
_, err = statement.Exec(name, age)
if err != nil {
log.Fatal(err)
}
log.Println("User created successfully")
}Read (Llegir)
Per recuperar dades de la base de dades, utilitzem l'operació SELECT.
Exemple de Codi
func getUsers(db *sql.DB) {
row, err := db.Query("SELECT id, name, age FROM users")
if err != nil {
log.Fatal(err)
}
defer row.Close()
for row.Next() {
var id int
var name string
var age int
row.Scan(&id, &name, &age)
log.Println(id, name, age)
}
}Update (Actualitzar)
Per modificar dades existents a la base de dades, utilitzem l'operació UPDATE.
Exemple de Codi
func updateUser(db *sql.DB, id int, name string, age int) {
updateUserSQL := `UPDATE users SET name = ?, age = ? WHERE id = ?`
statement, err := db.Prepare(updateUserSQL)
if err != nil {
log.Fatal(err)
}
defer statement.Close()
_, err = statement.Exec(name, age, id)
if err != nil {
log.Fatal(err)
}
log.Println("User updated successfully")
}Delete (Eliminar)
Per eliminar dades de la base de dades, utilitzem l'operació DELETE.
Exemple de Codi
func deleteUser(db *sql.DB, id int) {
deleteUserSQL := `DELETE FROM users WHERE id = ?`
statement, err := db.Prepare(deleteUserSQL)
if err != nil {
log.Fatal(err)
}
defer statement.Close()
_, err = statement.Exec(id)
if err != nil {
log.Fatal(err)
}
log.Println("User deleted successfully")
}Exercicis Pràctics
- Crear un Usuari: Escriu una funció que insereixi un nou usuari a la base de dades.
- Llegir Usuaris: Escriu una funció que recuperi tots els usuaris de la base de dades i els imprimeixi.
- Actualitzar un Usuari: Escriu una funció que actualitzi el nom i l'edat d'un usuari existent.
- Eliminar un Usuari: Escriu una funció que elimini un usuari de la base de dades.
Solucions
Crear un Usuari
func main() {
db, err := sql.Open("sqlite3", "./example.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
createUser(db, "John Doe", 30)
}Llegir Usuaris
func main() {
db, err := sql.Open("sqlite3", "./example.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
getUsers(db)
}Actualitzar un Usuari
func main() {
db, err := sql.Open("sqlite3", "./example.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
updateUser(db, 1, "Jane Doe", 25)
}Eliminar un Usuari
func main() {
db, err := sql.Open("sqlite3", "./example.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
deleteUser(db, 1)
}Conclusió
En aquest tema, hem après a realitzar operacions CRUD en una base de dades utilitzant Go. Aquestes operacions són fonamentals per a qualsevol aplicació que treballi amb dades persistents. Hem vist com connectar-nos a una base de dades, crear taules i realitzar operacions de creació, lectura, actualització i eliminació de dades.
En el següent tema, explorarem com utilitzar un ORM (Object-Relational Mapping) per simplificar aquestes operacions.
Curs de Programació en Go
Mòdul 1: Introducció a Go
- Introducció a Go
- Configuració de l'Entorn Go
- El Teu Primer Programa en Go
- Sintaxi i Estructura Bàsiques
Mòdul 2: Conceptes Bàsics
Mòdul 3: Estructures de Dades Avançades
Mòdul 4: Gestió d'Errors
Mòdul 5: Concurrència
Mòdul 6: Temes Avançats
Mòdul 7: Desenvolupament Web amb Go
Mòdul 8: Treballant amb Bases de Dades
Mòdul 9: Desplegament i Manteniment
- Construcció i Desplegament d'Aplicacions Go
- Registre
- Monitorització i Optimització del Rendiment
- Millors Pràctiques de Seguretat
