这是我使用 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,它应该可以按预期工作。
- 1 回答
- 0 关注
- 205 浏览
添加回答
举报
0/150
提交
取消
