J'essaie de me connecter à la base de données mysql distante à l'aide de go et du package database/sql. Je trouve la documentation go/mysql déroutante. Il semble qu'il n'y ait pas un seul exemple de connexion à un hôte distant. Comme tout le monde utiliserait localhost. Jusqu'ici j'ai cette
import (
"database/sql"
_ "github.com/ziutek/mymysql/godrv"
db, err := sql.Open("mymysql", "tcp:"+dbHost*dbName+"/"+user+"/"+pass)
defer db.Close()
Basé sur la documentation de https://github.com/ziutek/mymysql
[PROTOCOL_SPECFIIC*]DBNAME/USER/PASSWD
//
// where protocol specific part may be empty (this means connection to
// local server using default protocol). Currently possible forms:
// DBNAME/USER/PASSWD
// unix:SOCKPATH*DBNAME/USER/PASSWD
// unix:SOCKPATH,OPTIONS*DBNAME/USER/PASSWD
// tcp:ADDR*DBNAME/USER/PASSWD
// tcp:ADDR,OPTIONS*DBNAME/USER/PASSWD
J'ai aussi essayé
db, err := sql.Open("mymysql", "tcp:"+dbHost, dbName+"/"+user+"/"+pass)
et ça ne marche pas non plus. La syntaxe entière semble cryptique.
Ces sites sont très utiles pour comprendre Go SQL: https://github.com/go-sql-driver/mysql/ (même si vous utilisez un pilote différent) et http: // go- database-sql.org/
Il y a quelques choses qui pourraient aider:
sql.Open()
est au format DSN. db, err := sql.Open("mysql", "<username>:<pw>@tcp(<Host>:<port>)/<dbname>")
travaille pour moi pour mes relations. Vérifiez l’utilisation de parenthèses pour les connexions TCP.mysql.New()
qui peut ouvrir des connexions en utilisant le format indiqué précédemment: db := mysql.New(proto, "", addr, user, pass, dbname)
(voir https://github.com/ziutek/mymysql/blob/master/examples/simple.go )sql.Open
n'ouvre pas réellement de connexion, il crée simplement une ressource de base de données. Vous pouvez vérifier que cela fonctionne en exécutant db.Ping()
La déclaration suivante fonctionne pour moi:
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
db, err := sql.Open("mysql", "db_user:password@tcp(localhost:3306)/my_db")
)