169 votes

Ce qui ' s la méthode recommandée pour se connecter à mysql depuis Go ?

Je suis à la recherche d’une solution fiable pour se connecter à une base de données MySQL d’aller. J’ai vu certaines bibliothèques autour, mais il est difficile de déterminer les différents États de l’exhaustivité et l’entretien courant. Je n’ai pas besoins compliquées, mais je voudrais savoir ce que les gens comptent sur, ou quelle est la solution la plus standard pour se connecter à MySQL.

267voto

dystroy Points 145126

Un peu de pilotes sont disponibles, mais vous ne devriez penser à ceux qui mettent en œuvre la base de données/sql package comme

  • il fournit un environnement propre et efficace de la syntaxe,
  • il vous garantit que vous pourrez par la suite changer le pilote sans changer votre code, à l'exception de l'importation et de la connexion.

Deux rapides et fiables des pilotes sont disponibles pour MySQL :

J'ai utilisé à la fois dans la production, les programmes sont en cours d'exécution pendant des mois avec les nombres de connexion dans les millions sans échec.

D'autres pilotes de base de données SQL sont répertoriés sur go-wiki.

L'importation lors de l'utilisation de MyMySQL :

import (
    "database/sql"
    _ "github.com/ziutek/mymysql/godrv"
)

L'importation lors de l'utilisation de Go-MySQL-Pilote :

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

La connexion et la fermeture à l'aide de MyMySQL :

con, err := sql.Open("mymysql", database+"/"+user+"/"+password)
defer con.Close()
// here you can use the connection, it will be closed when function returns

La connexion et la fermeture à l'aide de Go-MySQL-Pilote :

con, err := sql.Open("mysql", store.user+":"+store.password+"@/"+store.database)
defer con.Close()

Sélectionner une ligne :

row := con.QueryRow("select mdpr, x, y, z from sometable where id=?", id)
cb := new(SomeThing)
err := row.Scan(&cb.Mdpr, &cb.X, &cb.Y, &cb.Z)

Sélectionnez plusieurs lignes et construire un tableau avec les résultats :

rows, err := con.Query("select a, b from partage where p1=? and p2=?", p1, p2)
if err != nil { /* error handling */}
partages := make([]*Partage, 0, 10)
var ida, idb uint
for rows.Next() {
    err = rows.Scan(&ida, &idb)
    if err != nil { /* error handling */}
    partages = append(partages, &Partage{ida, idb})
}

Insérer :

_, err = con.Exec("insert into tbl (id, mdpr, isok) values (?, ?, 1)", id, mdpr)

Vous verrez que le travail en Aller avec MySQL est une expérience délicieuse : j'ai jamais eu un problème, mes serveurs de fonctionner pendant des mois sans erreurs ou des fuites. Le fait que la plupart des fonctions simplement prendre un nombre variable d'arguments éclaircir une tâche qui est pénible dans de nombreuses langues.

Notez que si, dans l'avenir, vous avez besoin d'utiliser un autre pilote MySQL, vous aurez juste à modifier les deux lignes dans un fichier aller : la ligne de procéder à l'importation et de la ligne de l'ouverture de la connexion.

Mise à jour : Comme j'ai maintenant testé dans la production de la plus récente Go-MySQL-Pilote depuis plus de 2 mois, je l'ai donné à une plus juste place.

13voto

Vladislav Points 81

Tutoriel de base de données SQL est une introduction détaillée au package de base de données/sql .

2voto

Badoet Points 1

peu de choses à prendre note du select-exemple 1 rang :

Il y a une ligne manquante. Next() dans cet exemple. Il faut appeler la ligne. Next() pour saisir la première ligne renvoyée.

Il y a également une rigidité à la bibliothèque qui, en quelque sorte essayer de promouvoir le minimalisme de données. Si vous essayez de sélectionner les colonnes qui n’est pas un Scan il lèvera erreurs (pas seulement les avertissements)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X