Alguns drivers estão disponíveis, mas você deve considerar apenas aqueles que implementam o database/sql API como
- fornece uma sintaxe limpa e eficiente,
- ele garante que você possa alterar o driver posteriormente sem alterar seu código, além da importação e da conexão.
Dois drivers rápidos e confiáveis estão disponíveis para MySQL:
Eu usei os dois em produção, os programas estão rodando por meses com números de conexão na casa dos milhões sem falhas.
Outros drivers de banco de dados SQL estão listados no go-wiki .
Importar ao usar MySQL:
import (
"database/sql"
_ "github.com/ziutek/mymysql/godrv"
)
Importar ao usar Go-MySQL-Driver:
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
Conectando e fechando usando MySQL:
con, err := sql.Open("mymysql", database+"/"+user+"/"+password)
defer con.Close()
// here you can use the connection, it will be closed when function returns
Conectando e fechando usando Go-MySQL-Driver:
con, err := sql.Open("mysql", store.user+":"+store.password+"@/"+store.database)
defer con.Close()
Selecione uma linha:
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)
Selecione várias linhas e crie uma matriz com resultados:
rows, err := con.Query("select a, b from item where p1=? and p2=?", p1, p2)
if err != nil { /* error handling */}
items := make([]*SomeStruct, 0, 10)
var ida, idb uint
for rows.Next() {
err = rows.Scan(&ida, &idb)
if err != nil { /* error handling */}
items = append(items, &SomeStruct{ida, idb})
}
Inserir:
_, err = con.Exec("insert into tbl (id, mdpr, isok) values (?, ?, 1)", id, mdpr)
Você verá que trabalhar em Go com MySQL é uma experiência deliciosa:eu nunca tive um problema, meus servidores rodam por meses sem erros ou vazamentos. O fato de que a maioria das funções simplesmente recebe um número variável de argumentos torna uma tarefa tediosa em muitas linguagens.
Observe que se, no futuro, você precisar usar outro driver MySQL, basta alterar duas linhas em um arquivo de uma vez:a linha que faz a importação e a linha que abre a conexão.