查询时sql golang无效的内存地址或零指针取消引用

我试图在连接后插入数据,当我命令INSERT...我能够连接到数据库的逻辑时,但是当我取消命令它们时,我得到了错误


panic: runtime error: invalid memory address or nil pointer dereference

[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x40f8e2a]


这是我的功能:


func Connect() (*sql.DB, error) {

    db, err := sql.Open("postgres", os.Getenv("PG_URL"))

    if err != nil {

        return nil, err

    }

    defer db.Close()


    stmt, _ := db.Prepare("INSERT INTO users(name, email, password) VALUES(?,?,?)")

    res, err := stmt.Exec("test", "test@mail.com", "12344")


    if err != nil{

        panic(err.Error())

    }

    fmt.Println(res)

    fmt.Println("Successfully connected!")

    return db, nil

}


我也尝试过像这篇文章 go sql一样做同样的事情 ,并且有同样的问题我是否错误地实现了这个?


富国沪深
浏览 125回答 2
2回答

开满天机

我打赌一美元/欧元/坦率地说,NPE 正在执行准备好的语句,如果你检查你忽略的唯一错误,它不会是nil,它会告诉你出了什么问题。

斯蒂芬大帝

我对 sqlite 有同样的问题。正如 Ivaylo Novakov 在他的回答中所描述的那样,我必须记录准备语句的错误(我之前像你一样忽略了stmt, _)对我来说,只要我在开发它就可以正常运行,但是当我创建最终的二进制文件时,我忘记启用了cgo)。错误得到了提示:Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go