亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法返回數據庫對象。

無法返回數據庫對象。

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 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號