'无效的内存地址'错误与去-mssql
问题描述:
我有一个问题,我似乎无法解决,可能是由于我没有经验与GO。我有以下代码在一台服务器上工作,但没有在另一台服务器上工作。下面是代码:'无效的内存地址'错误与去-mssql
// Build out the connection string to the database, and then open the connection to the database.
connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d", *server, *user, *password, *port)
if *debug { fmt.Printf(" connString:%s\n", connString) }
db, err = sql.Open("mssql", connString)
if err != nil { log.Fatal("Open connection failed:", err.Error()) }
err = db.Ping()
if err != nil {
fmt.Println("Cannot connect: ", err.Error())
return
}
rows, _ := db.Query("SELECT Zip FROM Zip_Rural WHERE Zip = ?", ZipCode[0:5])
defer rows.Close()
if !rows.Next() {
acreageRequirement = .5
}
在读取if !rows.Next()
我得到以下错误行:
panic: runtime error: invalid memory address or nil pointer dereference
panic: runtime error: invalid memory address or nil pointer dereference [signal 0xc0000005 code=0x0 addr=0x20 pc=0x477918]
此相同的代码在另一台服务器上就好了,在两台机器上运行的GO版本1.4.2 。我有一种感觉,我在这里某处有一些不好的语法,但不知道真正的问题是什么。在同一个文件内呼叫db.Exec
工作得很好,这使我相信我的数据库连接完全正常,但由于某种原因db.Query
未正确执行。
答
db.Query
可能有错误。检查你的错误,如果它不是nil
,假设rows
是nil
。即调用rows.Next()
将发生段错误。 如果显示错误,您可能会发现问题所在。
谢谢,这就是我作为一个noob得到的。我的用户的默认数据库不正确,因此.Query失败,出现“表不存在”样式错误。更改了登录的默认数据库,现在正在处理。谢谢 :)。 –