2014-10-30 2 views
1
var myDB *db.DB 

func init() { 
    myDB, err := db.OpenDB("db") 
    if err := myDB.Create("Feeds"); err != nil {} 
    if err := myDB.Create("Votes"); err != nil {} 
} 

func idb() { 
    for _, name := range myDB.AllCols() { 
     fmt.Printf("I have a collection called %s\n", name) 
    }  
} 

func main() { 
    idb() 
} 

Я получаю следующее сообщение об ошибке:Почему мой tiedot DB указатель nil?

runtime error: invalid memory address or nil pointer dereference

Это, вероятно, потому, что myDB является nil, но почему и как я могу это исправить, так что я могу настройки MyDB в инициализации?

Обратите внимание, что если я просто брошу все в main без использования глобальной переменной, он будет работать.

ответ

2

Short variable declarations

A short variable declaration uses the syntax:

ShortVarDecl = IdentifierList ":=" ExpressionList . 

It is shorthand for a regular variable declaration with initializer expressions but no types:

"var" IdentifierList = ExpressionList . 

myDB является локальной переменной init функции. := - краткое объявление переменной.

myDB, err := db.OpenDB("db") 

Для пакета обновления myDB переменного, запись

var err error 
myDB, err = db.OpenDB("db") 
+0

хорошо я думал из-ERR еще не существовал мне нужно: = –

+0

он работает сейчас ТНХ :) –

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