Читая доку насколько я понял то подготовленный запрос потом просто шлёт данные серверу что повышает производительность mysql. Читая доку драйвера мускуля я узнал что он автоматом делает пул коннектов. И мне пришло в голову сделать глобальный map (для пакета) и в init определить в этот мап все запросы (Prepare), а потом через хелпер получать обьект запроса и просто отправлять данные (Exec).
Стоит вообще так делать или же по всему коду пихать Prepare ?
Так как меня не могут понять вот что я описал
package main
import (
"database/sql"
"log"
_ "github.com/go-sql-driver/mysql"
"github.com/v-grabko/Core/Net/RPC/TCP/Server"
)
var DB *sql.DB
var P map[string]*sql.Stmt
func init() {
db, err := sql.Open("mysql", "root:parsh888@tcp(127.0.0.1:3306)/AuthService")
if err != nil {
log.Fatal(err)
}
db.SetMaxIdleConns(50)
P = make(map[string]*sql.Stmt)
P["users"], err = db.Prepare("INSERT INTO users(login, email, pass) VALUES( ?, ?, ?)")
if err != nil {
log.Fatalf(err.Error())
}
DB = db
}
func main() {
Server.Add("Save", Save)
Server.Run("", "5000", "password")
}
func Save(ps map[string]string) map[string]string {
var id int
err := DB.QueryRow("SELECT id FROM users WHERE login=? AND email=?", ps["login"], ps["email"]).Scan(&id)
switch {
case err == sql.ErrNoRows:
_, err = P["users"].Exec(ps["login"], ps["email"], ps["pass"])
if err != nil {
panic(err.Error())
}
ps["code"] = "1"
ps["message"] = "Ok"
case err != nil:
log.Println(err)
ps["code"] = "500"
ps["message"] = "Ошибка сервера"
default:
ps["code"] = "2"
ps["message"] = "Такой пользователь уже есть"
}
return ps
}