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/