Глобальные переменные и Go
В настоящее время я пытаюсь работать над небольшим проектом Go, и у меня есть проблема, которую я пытаюсь решить.
Я сейчас пользуюсь github.com/jinzhu/gorm
для обработки операций с базой данных для серверной части GraphQL, и я хотел иметь возможность хранить соединение с БД в глобальной переменной, доступной во всем проекте (включая подпакеты).
Моя первая попытка была создать переменную с именем db
сделав следующее в моем main.go
файл:
var db *gorm.DB
var err error
затем внутри init()
функция:
func init() {
db, err = gorm.Open("postgres", "credential stuff here")
db.AutoMigrate(&modelStructHere)
defer db.Close()
}
Там нет никаких сбоев, но я бы предположил, из-за обзора, db
переменная используется только внутри main.go
, но я также должен иметь возможность использовать это внутри gql/gql.go
где мой распознаватель GraphQL в настоящее время находится.
Возможно, мне следует переместить этот кусок кода (DB init) в реальный файл распознавателя, так как в любом случае для операций с БД действительно нет никакой пользы, так что, возможно, в этом проблема?
Заранее спасибо!
1 ответ
Алекс комментарий на месте. Создайте папку с именем "database" и внутри поместите файл с именем "database.go", содержащий это:
package database
// the imports go here
var DB *gorm.DB
Теперь вы можете использовать его где угодно database.DB
, Не следует делать переменную ошибки глобальной, обрабатывать ее в той же функции, которая инициализирует БД. Функция init может быть в любом месте, обычно вы хотите это в начале вашей программы в основной функции.