Изменить: проблема в том, что вы использовали короткое объявление переменной :=
, и вы только что сохранили созданное значение *DB
в локальной переменной, а не в глобальной.
Эта строка:
db, err := NewDB(dbinfo)
Создает 2 локальные переменные: db
и err
, и этот локальный db
не имеет ничего общего с вашей глобальной переменной db
. Ваша глобальная переменная останется nil
. Вы должны назначить созданную *DB
глобальной переменной. Не используйте короткое объявление переменной, но простое назначение , например:
var err error
db, err = NewDB(dbinfo)
if err != nil {
log.Fatal(err)
}
Далее следует исходный ответ.
Это тип указателя, у вас есть для его инициализации перед ее использованием. Нулевым значением для типов указателей является nil
.
Вам не нужно экспортировать его (это то, что начинается с заглавной буквы). Обратите внимание, что не имеет значения, что у вас есть несколько файлов, если они являются частью одного и того же пакета, они могут получить доступ к идентификаторам, определенным друг другом.
Хорошим решением было бы сделать это в пакете init()
, которая вызывается автоматически.
Обратите внимание, что sql.Open()
может просто подтвердить свои аргументы, не создавая соединение с базой данных. Чтобы проверить правильность имени источника данных, вызовите DB.Ping()
.
Например:
var db *sql.DB
func init() {
var err error
db, err = sql.Open("yourdrivername", "somesource")
if err != nil {
log.Fatal(err)
}
if err = db.Ping(); err != nil {
log.Fatal(err)
}
}
Я мог бы решить эту проблему, установив django-rest-framework-json-api.
. Если кто-то столкнулся с проблемой, это преобразование dict
в JSON
.