Глобальные переменные и 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 может быть в любом месте, обычно вы хотите это в начале вашей программы в основной функции.

Другие вопросы по тегам