Каков рекомендуемый способ подключения к MySQL от Go?
Я ищу надежное решение для подключения к базе данных MySQL из. Я видел некоторые библиотеки, но трудно определить различные состояния полноты и текущего обслуживания. У меня нет сложных потребностей, но я хотел бы знать, на что люди полагаются или какое самое стандартное решение для подключения к MySQL.
2 ответов
доступно несколько драйверов, но вы должны учитывать только те, которые реализуют база данных / sql API as
- обеспечивает чистый и эффективный синтаксис
- это гарантирует, что вы можете позже изменить драйвер без изменения кода, кроме импорта и подключения.
два быстрых и надежных драйвера доступны для MySQL :
я использовал оба из них в производстве, программы работают в течение нескольких месяцев с номерами соединений в миллионах без сбоев.
другие драйверы базы данных SQL перечислены на go-wiki.
импорт при использовании MyMySQL:
import (
"database/sql"
_ "github.com/ziutek/mymysql/godrv"
)
импорт при использовании Go-MySQL-Driver :
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
подключение и закрытие с помощью 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
подключение и закрытие с помощью Go-MySQL-Driver:
con, err := sql.Open("mysql", store.user+":"+store.password+"@/"+store.database)
defer con.Close()
выбираем одну строку :
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)
выберите несколько строк и создайте массив с результатами:
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})
}
вставить :
_, err = con.Exec("insert into tbl (id, mdpr, isok) values (?, ?, 1)", id, mdpr)
вы увидите, что работа в Go с MySQL восхитительна опыт работы: I никогда была проблема, мои серверы работают в течение нескольких месяцев без ошибок или утечек. Тот факт, что большинство функций просто принимают переменное число аргументов, облегчает задачу, которая утомительна во многих языках.
обратите внимание, что если в будущем вам нужно использовать другой драйвер MySQL, вам просто нужно будет изменить две строки в одном файле go : строка, выполняющая импорт, и строка, открывающая соединение.
несколько вещей, чтобы принять к сведению пример строки select 1:
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)
отсутствует row.Next()
в этом примере. его нужно назвать row.Next()
чтобы захватить первую возвращенную строку.
также существует некоторая негибкость библиотеки, которая каким-то образом пытается способствовать минимализму данных. если вы попытаетесь выбрать столбцы, которые не сканируются, он выдаст ошибки (а не только предупреждения)