参考 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過會都會自動關了的。但要養成手動關的習慣。