Connessione a MySQL e MariaDB in Go con GORM
GORM è senza dubbio l'ORM più usato in ambito Go.
Se usate già altri ORM tipo Eloquent, non dovreste avere problemi.
In questo articolo vediamo come usarlo per connetterci a MariaDB (ma vale anche per MySQL).
Alcune considerazioni:
- la mia tabella non ha un campo ID auto increment; la Primary Key è il campo video_titolo
- ho "forzato" il nome della tabella a mio piacimento
- le tabelle sono tutte create, quindi non ho usato le migrations
- solo tre campi sono obbligatori in fase di inserimento
Detto ciò partiamo con l'installazione:
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
Qui sotto un esempio di codice in cui:
- facciamo un inserimento
- se va a buon fine eseguiamo una query
- sennò stampiamo l'errore
package main
import (
"fmt"
"time"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type Video struct {
VideoTitolo string `gorm:"primaryKey"`
VideoFormat *string
VideoCodec *string
VideoSize *float32
VideoWidth *int32
VideoHeight *int32
VideoDuration *string
VideoDataAggiunta time.Time
VideoDataModifica time.Time
}
type Tabler interface {
TableName() string
}
func (Video) TableName() string {
return "video"
}
func main() {
dsn := "DBUSER:DBPASSWORD@tcp(DBHOST:3306)/DBNOME?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println(err)
}
newVideo := Video{VideoTitolo: "TEST", VideoDataAggiunta: time.Now(), VideoDataModifica: time.Now()}
resultAdd := db.Create(newVideo)
fmt.Println(newVideo.VideoTitolo, resultAdd)
if resultAdd.Error != nil {
fmt.Println(resultAdd.Error)
} else {
var videos []Video
result := db.Find(&videos)
fmt.Println("----------")
fmt.Println(result.RowsAffected)
for _, row := range videos {
fmt.Println(row.VideoTitolo, row.VideoFormat, row.VideoDataAggiunta.Format(time.DateOnly))
}
}
}
Se lo eseguite due volte di fila otterrete un errore, in quanto il titolo già esiste ed è Primary Key.
Enjoy!
go gorm database mysql mariadb
Commentami!