难道是必须手动调用db.Close()释放资源?

参考 astaxie 的代码

import (
    _ "code.google.com/p/go-mysql-driver/mysql"
    "database/sql"
    "fmt"
    //"time")

func main() {
    db, err := sql.Open("mysql", "astaxie:astaxie@/test?charset=utf8")    checkErr(err)    //插入数据
    stmt, err := db.Prepare("INSERT userinfo SET username=?,departname=?,created=?")    checkErr(err)

    res, err := stmt.Exec("astaxie", "研发部门", "2012-12-09")    checkErr(err)

    id, err := res.LastInsertId()    checkErr(err)

    fmt.Println(id)    //删除数据
    stmt, err = db.Prepare("delete from userinfo where uid=?")    checkErr(err)

    res, err = stmt.Exec(id)    checkErr(err)

    affect, err = res.RowsAffected()    checkErr(err)

    fmt.Println(affect)

}

func checkErr(err error) {    if err != nil {        panic(err)
    }
}

求教:这段代码对数据库的连接没有主动关闭(调用 db.Close()), 是不是Go的垃圾收集自动关闭释放资源呢? 还是必须手动调用db.Close()释放资源?


慕运维8079593
浏览 106回答 2
2回答

慕哥6287543

Go垃圾回收是内存垃圾回收,分配给对象的内存回收。对于资源,必须手动释放,还给操作系统

繁花如伊

不手动关的话,可能在你程序结束的时候,或者这个连接对象出了作用域的时候,golang会帮你自动关闭,不过还是支持手动关闭,这是好习惯。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go