Доступно декілька драйверів, але слід розглянути лише ті, що реалізують API бази даних / sql як
- це забезпечує чистий та ефективний синтаксис,
- це гарантує згодом ви можете змінити драйвер, не змінюючи код, крім імпорту та з'єднання.
Для MySQL доступні два швидких та надійних драйвера:
Я використовував їх обох у виробництві, програми працюють місяцями з мільйонами підключень без відмов.
Інші драйвери баз даних SQL перелічені на go-wiki .
Імпорт при використанні MyMySQL:
import (
"database/sql"
_ "github.com/ziutek/mymysql/godrv"
)
Імпорт при використанні Go-MySQL-драйвера:
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-драйвера:
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 - чудовий досвід: у мене ніколи не було проблем, мої сервери працюють місяцями без помилок чи протікань. Той факт, що більшість функцій просто приймає змінну кількість аргументів, полегшує завдання, яке в багатьох мовах стомлює.
Зауважте, що якщо в майбутньому вам потрібно буде використовувати інший драйвер MySQL, вам доведеться просто змінити два рядки в одному файлі ходу: рядок, який виконує імпорт, і рядок, що відкриває з'єднання.