Tutoriel MySQL en Go [partie 2: connexion et configuration]
Photo par Tobias Fischer sur Unsplash
Rappel :
Ce petit tutoriel vous accompagne sur la mise en place d’un serveur MySQL/MariaDB et sa programmation simple en Go. L’idée c’est de présenter ici le minimum pour avoir une application fonctionnelle. Il s’inscrit dans une petite série d’articles que je voulais faire sur les bases de données.
Sommaire
- Installer votre serveur MySQL, cliquez ici.
- Ouvrir une connexion vers votre serveur MySQL, cliquez ici.
- Transfert de données MySQL avec Go, prochainement
- Transactions dans MySQL avec Go, prochainement
Connexion à MySQL avec Go
En Go, l’accès à des bases de données de type SQL se fait grâce au package database/sql qui propose une interface générique aux bases de données de type SQL. Mais ce package ne fonctionne pas tout seul. Ce n’est qu’une interface. Il faut utiliser un autre package qui servira de pilote (driver en anglais). Pour ma part, j’utilise celui-ci : github.com/go-sql-driver/mysql.
Du coup, les imports, dans un code en Go, ressemblent à ça :
package main import ( "database/sql" _ "github.com/go-sql-driver/mysql" )
Pour ceux qui n’ont pas l’habitude, le underscore (caractère _) devant “github.com/go-sql-driver/mysql” indique que le package est bien inclus, mais que nous n’utiliserons pas de symbole issu de ce package. Mais à quoi cela sert d’inclure ce package donc ? La réponse n’est pas si simple. Il se trouve que dans ce package, il y a une fonction init() qui va enregistrer le pilote “MySQL” auprès du package “database/sql”. Ce qui permet de faire des requêtes via l’interface générique proposée par “database/sql”. Il n’est pas impossible que j’écrive un petit article sur cette façon de procéder prochainement.
Quoi qu’il en soit, maintenant, nous pouvons nous connecter à la base de données SQL (je vous laisse définir les variables adminUser, adminPass, dbHost et dbPort à votre convenance):
var ( adminUser = "root" adminPass = "pass" dbHost = "127.0.0.1" dbPort = 3306 ) func main() { dbSrc := fmt.Sprintf("%s:%s@tcp(%s:%d)/?parseTime=true", adminUser, adminPass, dbHost, dbPort) db, err := sql.Open("mysql", dbSrc) if err != nil { log.Fatalf("sql.Open failed: %v", err) } defer db.Close()
La fonction sql.Open() prend en argument le nom du driver, ici “mysql”, qui, je vous le rappelle, a été “enregistré” par le package “github.com/go-sql-driver/mysql”. Il prend aussi une chaîne de caractères qui représente les paramètres de connexion. Ici la forme est “user:password@dbaddr/dbname”. Cela me semble assez explicite, mais dans le cas où vous avez des difficultés, il y a un wiki qui donne plus de détails et qui est accessible ici.
Bon, pour tout vous dire, je n’ai pas été tout à fait précis. Contrairement à ce que son nom laisse supposer, la fonction sql.Open() n’ouvre pas vraiment la connexion. Elle ne fait que valider les paramètres de connexion. Si vous voulez vous assurer que la connexion est correctement établie, il vous faut passer par la fonction Ping() comme suit :
// sql.Open() does not establish any connections to the database ... err = db.Ping() if err != nil { log.Fatalf("db.Ping failed: %v", err) }
Création d’une base de données
Le reste est assez simple si on sait programmer en SQL. Pour commencer, on peut créer une base de données :
_, err = db.Exec("CREATE DATABASE IF NOT EXISTS " + dataBaseName) if err != nil { log.Fatalf("db.Exec(CREATE DATABASE) failed: %v", err) }
Nous n’avons pas besoin ici de consulter le contenu retourné par la fonction db.Exec(). Maintenant nous pouvons, sur le même modèle, créer une table :
_, err = db.Exec("USE " + dataBaseName) if err != nil { log.Fatalf("db.Exec(USE) failed: %v", err) } _, err = db.Exec(`CREATE TABLE IF NOT EXISTS ` + tableName + ` ( id INT(11) NOT NULL AUTO_INCREMENT, data VARCHAR(32), creation DATETIME, PRIMARY KEY (id) )`) if err != nil { log.Fatalf("db.Exec(CREATE TABLE) failed: %v", err) }
Là aussi, aucune surprise. Il faut juste ne pas oublier de préciser qu’on veut créer la table dans la base de données nouvellement créée. C’est la raison d’être de la commande SQL “USE”.
Tutoriel MySQL en Go
- Tutoriel MySQL en Go [partie 1: installation]
- Tutoriel MySQL en Go [partie 2: connexion et configuration]
- Tutoriel MySQL en Go [partie 3: transfert de données]
- Tutoriel MySQL en Go [partie 4: transactions]