Vamos a conectar un script del lenguaje go o Golang con una base de datos MySQL de la forma mas facil y simple posible.
En articulos anteriores ya vimos lo basico de Golang , ciclo for, variables y otras cosas, ahora vamos a poner en practica lo aprendido.
Ahora vamos a crear una carpeta para el proyecto de prueba y nos vamos a colocar dentro de esa carpeta en la cmd o terminal.
Despues vamos a inicializar un modulo de go, en mi caso le pondre prueba
go mod init pruebaEsto nos va a crear un archivo go.mod donde se van a agregar para descargar los modulos extra que vamos a usar.
Código
Para el codigo vamos a usar los siguientes modulos.
import "fmt"
import "github.com/go-sql-driver/mysql"
import "database/sql"Son los basicos para realizar una conexion a la base de datos.
El codigo completo de la conexion.
// Author @evilnapsis
package main
import "fmt"
import "github.com/go-sql-driver/mysql"
import "database/sql"
// creamos la estructura o clase donde se guardaran los resultados
type Tabla struct {
name string
}
var db *sql.DB
var rows *sql.Rows
func main(){
fmt.Println("Probando MySQL in go...")
// seccion1. Codigo para configurar la conexion a la base de datos
cfg := mysql.NewConfig()
cfg.User = "root"
cfg.Passwd = ""
cfg.Addr = "127.0.0.1:3306"
cfg.DBName = "inventiolite"
// seccion 2. realizamos la conexion y si hay algun error lo mostramos
var err error
db, err = sql.Open("mysql", cfg.FormatDSN())
if err != nil{
//log.Fatal(err)
}
fmt.Println("conectado!")
var tablas []Tabla
// seccion 3. ejecutamos la consulta, en este caso mostrar las tablas de la DB
rows, err = db.Query("show tables")
if err!= nil {
fmt.Errorf("error del SQL")
}
// seccion 4. hacemos un recorrido de los resultados
for rows.Next(){
var tabl Tabla
if err := rows.Scan(&tabl.name); err!=nil{
fmt.Errorf("prueba : %v", err)
}
tablas = append(tablas, tabl)
}
// seccion 5. recorremos y mostramos los resultados
for tb := range tablas{
fmt.Println("tabla: ", tablas[tb].name)
}
rows.Close() // cerramos la lectura
db.Close() // cerramos la conexion
//fmt.Println("%+v", tablas)
}Puntos Clave
- El uso de
defer: En Go,deferasegura que un recurso (como la base de datos o el cursor de filas) se cierre automáticamente cuando la funciónmaintermine, evitando fugas de memoria. - Importación “Ciega” (
_): Importamos el driver de MySQL anteponiendo un guion bajo porque solo necesitamos que se registre en el paquetedatabase/sql, no llamaremos a sus funciones directamente. - Mapeo con
Scan: La funciónrows.Scanes la encargada de pasar los datos crudos de MySQL a las variables o estructuras de Go. Es importante que el orden de las variables enScancoincida con el orden de las columnas en tuSELECT.
En el código hay comentarios y se puede entender un poco lo que estamos haciendo.
El archivo de ejemplo le pusimos de nombre mysql1.go, lo ejecutamos en la terminal con el comando
go run mysql1.goY veremos como resultado la consulta sql, en este caso es el listado de tablas de la base de datos.

Conclusión
Conectar Go con MySQL es el primer paso para construir aplicaciones backend de alto rendimiento. A diferencia de otros lenguajes, Go ofrece una gestión de memoria superior y un modelo de concurrencia que permite manejar miles de conexiones simultáneas de forma ligera.