一尘不染

为什么我的特征数据库指针为零?

go

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()
}

我收到以下错误:

运行时错误:无效的内存地址或nil指针取消引用

可能是因为myDBis nil,但是为什么以及如何解决它,以便可以在init中设置myDB?

请注意,如果我只删除main中的所有内容而不使用全局变量,则它可以正常工作。


阅读 208

收藏
2020-07-02

共1个答案

一尘不染

简短的变量声明

简短的变量声明使用以下语法:

ShortVarDecl = IdentifierList ":=" ExpressionList .

它是带有初始化表达式但没有类型的常规变量声明的简写:

"var" IdentifierList = ExpressionList .

myDB是局部init函数变量。:=是一个简短的变量声明。

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

要更新程序包myDB变量,请编写,

var err error
myDB, err = db.OpenDB("db")
2020-07-02