为了账号安全,请及时绑定邮箱和手机立即绑定

无法返回数据库对象。

无法返回数据库对象。

Go
森栏 2021-12-20 16:24:52
这是我使用 postgres 数据库的代码。package mainimport (    "database/sql"    _ "github.com/lib/pq"    "fmt"    "log")//Details required for connectionconst (    HOST     = "HOSTNAME"    USER     = "USER"    PASSWORD = "PASSWORD"    DATABASE = "DB")func Create() (*sql.DB) {    dbinfo := fmt.Sprintf("host=%s user=%s password=%s dbname=%s", HOST, USER, PASSWORD, DATABASE)    db,err  := sql.Open("postgres", dbinfo)    defer db.Close()    if (err != nil) {        log.Fatal(err)    }    err = db.Ping()    if err != nil {      log.Fatal(err)    }    return db}func main() {    db := Create()    querStmt, err := db.Prepare("select count(*) from table")    if err != nil {        fmt.Printf("Cannot prepare query\n")        log.Fatal(err)    }    res, err := querStmt.Exec()    if err != nil {        fmt.Printf("Cannot execute query\n")        log.Fatal(err)    }    fmt.Printf("%v\n", res)}运行此代码时,我收到此错误Cannot prepare query2016/03/09 16:57:23 sql: database is closed如果我Create()从那时开始运行查询,它可以完美运行,但对Create()inside返回的 db 对象执行相同操作main()不起作用。感谢帮助。
查看完整描述

1 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

您的数据库在您返回的那一刻就关闭了,Create因为您的 defer 在它里面而不是 inside main。将 defer 移到 main,它应该可以按预期工作。


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号