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‘.
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');

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

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:

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
Más información en inglés: https://geekole.com/connect-to-mariadb-in-golang/