Connessione a MariaDB in Gin

Mattepuffo's logo
Connessione a MariaDB in Gin

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!


Condividi

Commentami!