這是我使用 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 關注
- 186 瀏覽
添加回答
舉報
0/150
提交
取消