Conectar Go y base de datos MySQL forma simple

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 prueba

Esto 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, defer asegura que un recurso (como la base de datos o el cursor de filas) se cierre automáticamente cuando la función main termine, evitando fugas de memoria.
  • Importación “Ciega” (_): Importamos el driver de MySQL anteponiendo un guion bajo porque solo necesitamos que se registre en el paquete database/sql, no llamaremos a sus funciones directamente.
  • Mapeo con Scan: La función rows.Scan es la encargada de pasar los datos crudos de MySQL a las variables o estructuras de Go. Es importante que el orden de las variables en Scan coincida con el orden de las columnas en tu SELECT.

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.go

Y 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.

Leave a Reply

Your email address will not be published. Required fields are marked *

Discover more from Evilnapsis

Subscribe now to keep reading and get access to the full archive.

Continue reading