Conectando a MySQL
Tiempo de lectura: 1 minutos
Operaciones básicas para usar una base de datos MySQL existente, con go
Connection-pooling
Si estás creando aplicaciones de bases de datos de alto rendimiento, es necesario usar connection-pooling. El paquete estándar database/sql cuenta con connection-pooling.
Esto significa en esencia que, cada vez que consultas la base de datos, estás utilizando una conexión de un grupo de conexiones que se han configurado al iniciar la aplicación. Estas conexiones se reutilizan una y otra vez, por lo que no estás creando y destruyendo una nueva conexión cada vez que realizas una consulta.
Imports
Utilizaremos el paquete sql y el driver de MySQl. Ejecutamos go mod tidy para bajar todos los paquetes indicados en el import:
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
) Conexión a la base de datos
Necesitamos user, password, host y base_de_datos y abrimos la conexión
db, err := sql.Open("mysql", "user:password@tcp(host)/base_de_datos")
// y gestinamos el error
if err != nil {
panic(err.Error())
} Utilizamos defer para cerrar la conexión, una vez acabe el procedimiento principal
defer db.Close() Ejecutar la consulta
Simplemente utilizamos el método db.Query
sql := "select * from articles where IDblog = 1"
results, err := db.Query(sql)
if err != nil {
// tratamiento adecuado del error en vez de un "panic"
panic(err.Error())
} Lectura de registros
La tabla devuelve cuatro columnas que recogemos en una estructura como esta:
type Astro struct {
IDart int `json:"article"`
Title string `json:"title"`
Lang string `json:"lang"`
published string `json:"published"`
} Montamos un bucle para leer los resultados y vamos asignando a nuestra estructura de registro. ten en cuenta que si se devuelven tres columnas y solo lees 2 de ellas, te dará error. Necesita que cuadren los parámetros con las columnas:
for results.Next() {
var article Astro
err = results.Scan(
&article.IDart,
&article.Title,
&article.Lang,
&article.published,
)
// procesar el registro
fmt.Println(article.published + ", " + article.Title)
}