Conectar Golang con MariaDB

Te mostramos como conectar golang con MariaDB en sencillos pasos. Para realizar una conexión es necesario descargar el paquete database/sql, que es parte del estándar de librarías de golang y las librerías específicas para conectar con MariaDB o MySQL de github, descargando ‘github.com/go-sql-driver/mysql‘.

Ver más ejemplos de Golang

package main
import (
  "database/sql"
  "log"
  _ "github.com/go-sql-driver/mysql"
)

//decodigo.com

type Usuario struct {
  ID       int    `json:"id"`
  Username string `json:"username"`
  Password string `json:"password"`
  Email    string `json:"email"`
}
func main() {
  db, err := sql.Open("mysql", "dec01:dec01@tcp(localhost:3306)/pruebas?parseTime=true")
  if err != nil {
    log.Print(err.Error())
  }
  defer db.Close()
  results, err := db.Query("SELECT id, username, password, email FROM usuarios")
  if err != nil {
    panic(err.Error())
  }
  for results.Next() {
    var usuario Usuario
    err = results.Scan(&usuario.ID, &usuario.Username, &usuario.Password, &usuario.Email)
    if err != nil {
      panic(err.Error())
    }
    log.Printf(usuario.Username + " " + usuario.Password + " " + usuario.Email)
  }
}

Antes de compilar y correr el bloque de código anterior, es necesario crear la base de datos y asegurarnos de tener una tabla usuarios con los mismos campos que esperamos consultar.

CREATE TABLE usuarios (
  id bigint(20) NOT NULL AUTO_INCREMENT,
  username varchar(100) NOT NULL,
  password varchar(100) NOT NULL,
  email varchar(100) NOT NULL,
  PRIMARY KEY (id)
) 

Después de crear la tabla, puedes agregar algunos registros con el siguiente script:

INSERT INTO usuarios (username,password,email) VALUES
   ('user1','123','myemail1@test.com'),
   ('user2','123','myemail2@test.com'),
   ('user3','123','myemail3@test.com');
Conectar Golang con MariaDB

Inicialmente corremos el comando para generar nuestro módulo init.

go mod init yourdomain.com/connectmariadb

El driver de MySQL se puede descargar e instalar con el siguiente comando:

go get -u github.com/go-sql-driver/mysql

Finalmente, compilamos:

go build

y corremos el ejemplo:

./connectarmariadb
Conectar Golang con MariaDB

Un ejemplo más completo con CREATE, INSERT, UPDATE y DELETE

El ejemplo anterior te permite consultar de forma sencilla una tabla, sin embargo, normalmente vamos a requerir de otras operaciones y no todas se realizan del mismo modo.Ademas es sólo consultar es necesario enviar datos nuevos o actualizarlos y eso implica pasar esos valores de algún modo en el query en como parte de los argumentos de la función en la que lo ejecutamos.

package main

import (
  "database/sql"
  "log"
  "strconv"

  _ "github.com/go-sql-driver/mysql"
)

//decodigo.com

type Usuario struct {
  ID       int    `json:"id"`
  Username string `json:"username"`
  Password string `json:"password"`
  Email    string `json:"email"`
}

func main() {
  db, err := sql.Open("mysql", "dec01:dec01@tcp(localhost:3306)/pruebas?parseTime=true")

  if err != nil {
    log.Print(err.Error())
  }
  defer db.Close()

  _, errCreate := db.Exec(`CREATE TABLE usuarios (
      id bigint(20) NOT NULL AUTO_INCREMENT,
      username varchar(100) NOT NULL,
      password varchar(100) NOT NULL,
      email varchar(100) NOT NULL,
      PRIMARY KEY (id)
    )`)
  if errCreate != nil {
    panic(err.Error())
  }

  for i := 1; i <= 10; i++ {
    _, errInsert := db.Exec(`INSERT INTO usuarios(username, password, email) VALUES (?, ?, ?)`,
      "user"+strconv.Itoa(i),
      strconv.Itoa(i),
      "myemail"+strconv.Itoa(i)+"@test.com")
    if errInsert != nil {
      panic(err.Error())
    }
  }

  _, errDelete := db.Exec(`DELETE FROM usuarios WHERE id=?`, 4)
  if errDelete != nil {
    panic(err.Error())
  }

  _, errUPDATE := db.Exec(`UPDATE usuarios SET username=? WHERE id=?`, "useraname", 1)
  if errUPDATE != nil {
    panic(err.Error())
  }

  results, errSelect := db.Query(`SELECT id, username, password, email FROM usuarios`)
  if errSelect != nil {
    panic(err.Error())
  }

  for results.Next() {
    var usuario Usuario
    err = results.Scan(&usuario.ID, &usuario.Username, &usuario.Password, &usuario.Email)
    if err != nil {
      panic(err.Error())
    }
    log.Printf(usuario.Username + " " + usuario.Password + " " + usuario.Email)
  }
}

Si compilamos y corremos este segundo ejemplo tendremos el siguiente resultado:

Conectar Golang con MariaDB, CREATE, INSERT, UPDATE, DELETE.

Es importante que consideres que este ejemplo para conectar golang con MariaDB crea nuevamente la tabla usuarios, por lo que si lo ejecutas después del primer ejemplo generará un error y no funcionará correctamente porque la tabla usuarios ya existe.

Puedes ver más acerca de como conectarte a una base de datos con golang en el siguiente enlace: https://pkg.go.dev/database/sql#pkg-types