Connessione a MariaDB/MySQL in Gofr

Mattepuffo's logo
Connessione a MariaDB/MySQL in Gofr

Connessione a MariaDB/MySQL in Gofr

In un precedente articolo abbiamo parlato di Gofr, quindi do per scontato il setup iniziale.

In questo articolo vediamo come connetterci ad un db MariaDB/MySQL.

Prima di tutto installiamo il driver:

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

Qui sotto il codice, comprensivo del nostro model:

package main

import (
	"database/sql"
	"fmt"
	"os"

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

type Persona struct {
	ID    int    `json:"id"`
	Email string `json:"email"`
}

func main() {
	app := gofr.New()

	db, err := sql.Open("mysql", "root:9211@tcp(localhost:3306)/test")
	if err != nil {
		fmt.Println(err)
		os.Exit(0)
	}

	defer db.Close()

	app.GET("/", func(ctx *gofr.Context) (interface{}, error) {
		return "Root!", nil
	})

	app.GET("/persone", func(ctx *gofr.Context) (interface{}, error) {
		rows, err := db.Query("SELECT id, email FROM persone")
		if err != nil {
			return nil, err
		}
		defer rows.Close()

		var persone []Persona
		for rows.Next() {
			var p Persona
			if err := rows.Scan(&p.ID, &p.Email); err != nil {
				return nil, err
			}
			persone = append(persone, p)
		}
		return persone, nil
	})

	app.GET("/persona/{id}", func(ctx *gofr.Context) (interface{}, error) {
		id := ctx.PathParam("id")
		var p Persona
		err := db.QueryRow("SELECT id, email FROM persone WHERE id = ?", id).Scan(&p.ID, &p.Email)
		if err != nil {
			return nil, fmt.Errorf("persona non trovata: %v", err)
		}
		return p, nil
	})

	app.Run()
}

Sulla documentazione è consigliato usare un file .env per la configurazione.

Io non l'ho usato perchè si tratta più che altro di test; a voi il compito di sistemare questa cosa come esercizio.

Enjoy!


Condividi

Commentami!