英文:
Why is my tiedot DB pointer nil?
问题
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("我有一个叫做%s的集合\n", name)
}
}
func main() {
idb()
}
我得到了以下错误:
运行时错误:无效的内存地址或空指针解引用
这可能是因为myDB
是nil
,但是为什么以及如何修复它,以便我可以在init中设置myDB?
请注意,如果我只是在main中放弃使用全局变量,它是可以工作的。
英文:
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()
}
I get the following error:
>runtime error: invalid memory address or nil pointer dereference
It is probably because myDB
is nil
, but why and how can I fix it so I can setup myDB in init?
Note that if I just drop everything in main without using a global variable, it works.
答案1
得分: 3
> 短变量声明
>
> 短变量声明使用以下语法:
>
> 短变量声明 = 标识符列表 ":=" 表达式列表。
>
> 它是一个带有初始化表达式但没有类型的常规变量声明的简写形式:
>
> "var" 标识符列表 = 表达式列表。
myDB
是一个局部的 init
函数变量。:=
是一个短变量声明。
myDB, err := db.OpenDB("db")
要更新包 myDB
变量,可以写成:
var err error
myDB, err = db.OpenDB("db")
英文:
> 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
is a local init
function variable. :=
is a short variable declaration.
myDB, err := db.OpenDB("db")
To update package myDB
variable, write,
var err error
myDB, err = db.OpenDB("db")
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论