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()
}
我收到以下错误:
运行时错误:无效的内存地址或无指针取消引用
可能是因为myDB
是nil
,但为什么以及如何修复它以便我可以在init中设置myDB?
请注意,如果我只是在不使用全局变量的情况下删除main中的所有内容,它就会起作用。
答案 0 :(得分:2)
短变量声明使用语法:
ShortVarDecl = IdentifierList ":=" ExpressionList .
它是带初始化程序的常规变量声明的简写 表达式,但没有类型:
"var" IdentifierList = ExpressionList .
myDB
是一个本地init
函数变量。 :=
是一个简短的变量声明。
myDB, err := db.OpenDB("db")
要更新包myDB
变量,请写
var err error
myDB, err = db.OpenDB("db")