En aquest tema, aprendrem com connectar una aplicació Go a una base de dades. Utilitzarem la biblioteca database/sql de Go juntament amb un controlador específic per a la base de dades que triem (en aquest cas, utilitzarem MySQL com a exemple). Aquest procés inclou la instal·lació del controlador, la configuració de la connexió i la realització de consultes bàsiques.

  1. Instal·lació del Controlador MySQL

Per connectar-nos a una base de dades MySQL, necessitem instal·lar el controlador MySQL per a Go. Utilitzarem el paquet go-sql-driver/mysql.

go get -u github.com/go-sql-driver/mysql

  1. Configuració de la Connexió

Un cop instal·lat el controlador, podem configurar la connexió a la base de dades. A continuació, es mostra un exemple de com fer-ho:

package main

import (
    "database/sql"
    "fmt"
    "log"

    _ "github.com/go-sql-driver/mysql"
)

func main() {
    // Configuració de la cadena de connexió
    dsn := "usuari:contrasenya@tcp(127.0.0.1:3306)/nom_base_de_dades"

    // Obrir la connexió a la base de dades
    db, err := sql.Open("mysql", dsn)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // Comprovar la connexió
    err = db.Ping()
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Connexió a la base de dades establerta correctament!")
}

Explicació del Codi

  1. Importació de Paquets: Importem els paquets necessaris, incloent el controlador MySQL (_ "github.com/go-sql-driver/mysql"). L'ús del guió baix (_) indica que importem el paquet només per executar el seu init funció, que registra el controlador MySQL amb la biblioteca database/sql.

  2. Configuració de la Cadena de Connexió: La cadena de connexió (dsn) conté la informació necessària per connectar-se a la base de dades, incloent l'usuari, la contrasenya, l'adreça del servidor i el nom de la base de dades.

  3. Obrir la Connexió: Utilitzem sql.Open per obrir una connexió a la base de dades. Aquesta funció no estableix una connexió immediatament, sinó que prepara l'objecte db per a futures operacions.

  4. Comprovar la Connexió: Utilitzem db.Ping per establir una connexió real amb la base de dades i comprovar que tot funciona correctament.

  5. Tancar la Connexió: Utilitzem defer db.Close() per assegurar-nos que la connexió es tanca quan el programa finalitza.

  1. Realització de Consultes Bàsiques

Un cop establerta la connexió, podem realitzar consultes a la base de dades. A continuació, es mostra un exemple de com realitzar una consulta SELECT:

func main() {
    // Configuració de la cadena de connexió
    dsn := "usuari:contrasenya@tcp(127.0.0.1:3306)/nom_base_de_dades"

    // Obrir la connexió a la base de dades
    db, err := sql.Open("mysql", dsn)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // Comprovar la connexió
    err = db.Ping()
    if err != nil {
        log.Fatal(err)
    }

    // Realitzar una consulta SELECT
    rows, err := db.Query("SELECT id, nom FROM usuaris")
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()

    // Iterar sobre els resultats
    for rows.Next() {
        var id int
        var nom string
        err := rows.Scan(&id, &nom)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("ID: %d, Nom: %s\n", id, nom)
    }

    // Comprovar si hi ha errors en la iteració
    if err = rows.Err(); err != nil {
        log.Fatal(err)
    }
}

Explicació del Codi

  1. Realitzar una Consulta SELECT: Utilitzem db.Query per executar una consulta SELECT. Aquesta funció retorna un objecte rows que conté els resultats de la consulta.

  2. Iterar sobre els Resultats: Utilitzem rows.Next per iterar sobre cada fila dels resultats. Per a cada fila, utilitzem rows.Scan per copiar els valors de les columnes en variables.

  3. Comprovar Errors en la Iteració: Després de la iteració, utilitzem rows.Err per comprovar si hi ha hagut errors durant la iteració.

Exercici Pràctic

Exercici

  1. Configura una base de dades MySQL local amb una taula anomenada productes que tingui les següents columnes: id (int), nom (varchar), preu (float).
  2. Escriu un programa en Go que es connecti a aquesta base de dades i mostri tots els productes.

Solució

package main

import (
    "database/sql"
    "fmt"
    "log"

    _ "github.com/go-sql-driver/mysql"
)

func main() {
    // Configuració de la cadena de connexió
    dsn := "usuari:contrasenya@tcp(127.0.0.1:3306)/nom_base_de_dades"

    // Obrir la connexió a la base de dades
    db, err := sql.Open("mysql", dsn)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // Comprovar la connexió
    err = db.Ping()
    if err != nil {
        log.Fatal(err)
    }

    // Realitzar una consulta SELECT
    rows, err := db.Query("SELECT id, nom, preu FROM productes")
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()

    // Iterar sobre els resultats
    for rows.Next() {
        var id int
        var nom string
        var preu float64
        err := rows.Scan(&id, &nom, &preu)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("ID: %d, Nom: %s, Preu: %.2f\n", id, nom, preu)
    }

    // Comprovar si hi ha errors en la iteració
    if err = rows.Err(); err != nil {
        log.Fatal(err)
    }
}

Conclusió

En aquest tema, hem après com connectar una aplicació Go a una base de dades MySQL, configurar la connexió i realitzar consultes bàsiques. Aquestes habilitats són fonamentals per a qualsevol desenvolupador que treballi amb aplicacions que necessiten emmagatzemar i recuperar dades de bases de dades. En el proper tema, explorarem com realitzar operacions CRUD (Crear, Llegir, Actualitzar, Eliminar) amb Go i MySQL.

© Copyright 2024. Tots els drets reservats