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.
- 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.
- 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
-
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 seuinitfunció, que registra el controlador MySQL amb la bibliotecadatabase/sql. -
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. -
Obrir la Connexió: Utilitzem
sql.Openper obrir una connexió a la base de dades. Aquesta funció no estableix una connexió immediatament, sinó que prepara l'objectedbper a futures operacions. -
Comprovar la Connexió: Utilitzem
db.Pingper establir una connexió real amb la base de dades i comprovar que tot funciona correctament. -
Tancar la Connexió: Utilitzem
defer db.Close()per assegurar-nos que la connexió es tanca quan el programa finalitza.
- 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
-
Realitzar una Consulta SELECT: Utilitzem
db.Queryper executar una consulta SELECT. Aquesta funció retorna un objecterowsque conté els resultats de la consulta. -
Iterar sobre els Resultats: Utilitzem
rows.Nextper iterar sobre cada fila dels resultats. Per a cada fila, utilitzemrows.Scanper copiar els valors de les columnes en variables. -
Comprovar Errors en la Iteració: Després de la iteració, utilitzem
rows.Errper comprovar si hi ha hagut errors durant la iteració.
Exercici Pràctic
Exercici
- Configura una base de dades MySQL local amb una taula anomenada
productesque tingui les següents columnes:id(int),nom(varchar),preu(float). - 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.
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
