参考 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()释放资源?
数据库的链接必须自己手动关闭的,这个和打开文件一样
Go垃圾回收是内存垃圾回收,分配给对象的内存回收。对于资源,必须手动释放,还给操作系统
不手动关的话,可能在你程序结束的时候,或者这个连接对象出了作用域的时候,golang会帮你自动关闭。。。不过还是支持手动关闭。。。这是好习惯。。。
当然可以不关闭,mysql过会都会自动关了的。但要养成手动关的习惯。