@vGrabko99
html, css, js, php, golang, mysql

Есть ли для Go библиотека работы с mysql?

Привет. Код вида
db, err := sql.Open("mysql", "root:parsh888@/generais")
	if err != nil {
		panic(err.Error())
	}
	defer db.Close()
	err = db.Ping()
	if err != nil {
		panic(err.Error())
	}

	age := 27
	rows, err := db.Query("SELECT * FROM keyApi WHERE key=?", age)
	if err != nil {
		log.Fatal(err)
	}
	defer rows.Close()

	for rows.Next() {
		var name string
		if err := rows.Scan(&name); err != nil {
			log.Fatal(err)
		}
		fmt.Printf("%s is %d\n", name, age)
	}
	if err := rows.Err(); err != nil {
		log.Fatal(err)
	}

Ради одного запроса... Не нравится мне столько писанины. Есть ли обёртки для этой штуки, которые просты в использовании, как в том же php - mysqli?
Всем спасибо.
  • Вопрос задан
  • 1448 просмотров
Решения вопроса 2
@mantyr
Пишу много Golang кода с удовольствием:)
1. db, err := sql.Open() требуется вызвать один раз, нет нужды на каждый запрос писать этот кусок кода
2. panic(err.Error()) - падать приложение в паник плохая практика, если вам нужен некий комплект данных, то сделайте функцию или метод который возвращает данные и ошибку (если есть)
3. log.Fatal(err) - так много логов вам не нужно. Суть в том что если вы получили ошибку, то вам нужно завершать текущий блок кода, а не продолжать его дальше. Ведь если вы не смогли получить данные из базы, то бегать по данным вам так же не нужно.

Пример того как это можно оформить play.golang.org/p/polc_jwrF7 правда я не использовал реальный модуль для MySQL и часть кода не дописано, так как это вы уже как-нибудь сами.
Ответ написан
@kshvakov
В Go нет разницы MySql это или, например, PostgreSql; database/sql ведет себя одинаково.

Для того чтоб не мучать себя rows.Close/rows.Next ... возьмите https://github.com/jmoiron/sqlx

и все сведется к

connect := sqlx.MustOpen("mysql", ...)

type keyApi struct {
KeyID int `db:"key"`
...
}

var result keyApi

err := connect.Get(&result, "SELECT * FROM keyApi WHERE key=?", age)

if err != nil {
...
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы