Connessione a MariaDB in Gin
Gin è uno dei web framework più utilizzati in Go.
In questo articolo vediamo come come connetterci ad un db MariaDB e come visualizzare i dati in formato JSON.
Prima di tutto dobbiamo installare due librerie:
go get -u github.com/gin-gonic/gin
go get -u github.com/go-sql-driver/mysql
Cerco di procedere in ordine.
Io ho creato diverse cartelle dove mettere i files, ovviamente voi potete fare come vi pare.
Cominciamo da utils/db.go che contiene la funzione di connessione al db:
package utils
import (
"database/sql"
"fmt"
"os"
_ "github.com/go-sql-driver/mysql"
)
func GetConnetcion() *sql.DB {
hostname := ""
dbUser := ""
dbPassword := ""
dbName := ""
db, err := sql.Open("mysql", dbUser+":"+dbPassword+"@tcp("+hostname+":3306)/"+dbName)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
return db
}
Poi abbiamo models/cliente.go che rappresenta la nostra tabella:
package models
type Cliente struct {
ID uint `json:"cl_id"`
Nome string `json:"cl_nome"`
UtenteFk string `json:"cl_utente_fk"`
DataAggiunta string `json:"cl_data_aggiunta"`
DataModifica string `json:"cl_data_modifica"`
}
Poi dentro clienti/clienti_controller.go abbiamo il nostro controller:
package clienti
import (
"fmt"
"net/http"
"os"
"todo/models"
"todo/utils"
"github.com/gin-gonic/gin"
)
func GetAll(ctx *gin.Context) {
var clienti []models.Cliente
db := utils.GetConnetcion()
res, err := db.Query("SELECT cl_id AS ID, cl_nome AS Nome, cl_utente_fk AS UtenteFk, cl_data_aggiunta AS DataAggiunta, cl_data_modifica AS DataModifica FROM todo_clienti")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
for res.Next() {
var cliente models.Cliente
err := res.Scan(&cliente.ID, &cliente.Nome, &cliente.UtenteFk, &cliente.DataAggiunta, &cliente.DataModifica)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
clienti = append(clienti, cliente)
}
ctx.JSON(http.StatusOK, gin.H{"data": clienti})
ctx.Done()
}
Qui metteremo i vati metodi per le operazioni su db; per adesso c'è una semplice select per visualizzare i dati.
Come vedete la funzione ci rimanda i dati direttamente in JSON.
Infine il nostro main.go:
package main
import (
"fmt"
"os"
"todo/clienti"
"github.com/gin-gonic/gin"
)
func main() {
//gin.SetMode(gin.ReleaseMode)
router := gin.Default()
router.GET("/", func(ctx *gin.Context) {
ctx.JSON(200, gin.H{
"message": "Beviti un GIN!",
})
})
clientiRoute := router.Group("clienti")
{
clientiRoute.GET("/", clienti.GetAll)
}
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
fmt.Println("Server in asolto su http://localhost:" + port)
if err := router.Run(":" + port); err != nil {
os.Exit(1)
}
}
Direi che è tutto.
Enjoy!
go gin-gonic gin mariadb json
Commentami!