当我尝试连接到Postgresql时出现恐慌

时间:2016-09-26 06:47:36

标签: postgresql go

我有一个简单的程序:

package main

import (
    "database/sql"
    "log"

    _ "github.com/lib/pq"
)

func main() {
    db, err := sql.Open("postgres", "user=demas password=pass host=192.168.99.100 port=32768 dbname=mydb sslmode=disabled")
    if err != nil {
        log.Fatal(err)
    }

    var name string
    rows, err := db.Query("select name from films")
    for rows.Next() {
        err = rows.Scan(&name)
        if err != nil {
            log.Fatal(err)
        }
        log.Printf("Subject is %s", name)
    }
}

当我尝试运行它时,我收到错误:

λ go run main.go
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x20 pc=0x460b2d]

goroutine 1 [running]:
panic(0x5d02a0, 0xc0420040c0)
        G:/scoop/apps/go/1.7.1/src/runtime/panic.go:500 +0x1af
database/sql.(*Rows).Next(0x0, 0x607fa6)
        G:/scoop/apps/go/1.7.1/src/database/sql/sql.go:1752 +0x2d
main.main()
        D:/dev_experiments/go-db1/main.go:18 +0x116
exit status 2

我该如何解决?

1 个答案:

答案 0 :(得分:0)

正如hobbs所说,你没有检查db.Query上的错误。

此外,在检查错误后推迟db.Close()。在对行执行任何操作之前,请务必检查错误。如果它返回错误,那么你也不会再获得“行”。所以行是零。