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 seuinit
funció, 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.Open
per obrir una connexió a la base de dades. Aquesta funció no estableix una connexió immediatament, sinó que prepara l'objectedb
per a futures operacions. -
Comprovar la Connexió: Utilitzem
db.Ping
per 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.Query
per executar una consulta SELECT. Aquesta funció retorna un objecterows
que conté els resultats de la consulta. -
Iterar sobre els Resultats: Utilitzem
rows.Next
per iterar sobre cada fila dels resultats. Per a cada fila, utilitzemrows.Scan
per copiar els valors de les columnes en variables. -
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
- Configura una base de dades MySQL local amb una taula anomenada
productes
que 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