2015-10-23 4 views
0

Является ли хорошей идеей инициализировать databaze как глобальную переменную? Может ли это работать?Инициализировать базу данных как глобальную переменную

Я думаю о чем-то вроде этого:

func MustDB(d *sql.DB, err error) *sql.DB { 
    if err != nil { 
    log.Panic(err) 
    } 
    return d 
} 

// what I don't know - is how to call db.Close() 
// username and password can also be read similar way 
var db *DB = MustDB(db.Open(...)) 

func MustPrepare(db *sql.DB, query string) *sql.Stmt { 
    res, err := sql.Prepare(db, query) 
    if err!=nil { 
    log.Panic(err) 
    } 
    return ret; 
} 

Преимущество заключается в том, что я могу просто создать подготовленные операторы SQL, как глобальные переменные. Мне не нужно создавать и управлять хранилищем, где будут добавлены все команды sql. Только я пишу:

var s1 *sql.Stmt = MustPrepare(db, "SELECT * FROM MyTable") 
var s2 *sql.Stmt = MustPrepare(db, "INSERT INTO MyTable(col1, col2) VALUES(?,?)") 
var s3 *sql.Stmt = MustPrepare(db, "DELETE FROM MyTable WHERE col1=?") 

Как вы думаете, этот шаблон полезен, или он не может работать вообще.

ответ

-2

Как правило, я не думаю, что это хорошая практика, чтобы использовать соединение с базой данных таким образом, вы должны приватизировать его и просто открыть/закрыть, как вам это нужно :)

Но если он работает, и вы хотите тогда нет ничего плохого в этом.

+2

Неверно, поскольку db.Open не открывает соединение с базой данных, но создает пул соединений. Вы не должны открывать и закрывать все это время. Я управляю подключениями для вас. – 0x434D53

2

В любом случае вы обычно инициализируете глобальную структуру данных DB, используя Open (по крайней мере глобальный в вашем пакете доступа к базе данных). Это не открывает фактическое соединение с БД, но создает пул соединений. Поэтому должен быть только один пример. Вы можете инициализировать это при инициализации своего пакета.

См http://go-database-sql.org/ или https://www.vividcortex.com/blog/2015/01/14/the-ultimate-guide-to-building-database-driven-apps-with-go/ для хорошего вводного руководства.

+0

http://www.alexedwards.net/blog/organising-database-access также обсуждает другие подходы к этому. – elithrar

0

Да, это хороший подход. когда вы идете через документацию идет ясно говорит вам

Редко Закрыть БД, так как ручка DB предназначаются, чтобы быть долгоживущим и распределяются между многими идут процедуры.

Go ведет собственный пул бездействующих соединений. Таким образом, функцию Open следует вызывать только один раз. Крайне редко необходимо закрыть БД.

Смежные вопросы