我现在正在学习Go这是我写的网络应用程序的代码:
func init() {
db, err := sql.Open("mysql", "master:123456@/shopping_list")
if err != nil {
panic(err.Error())
}
http.HandleFunc("/sql", func(w http.ResponseWriter, r *http.Request) {
sqlHandler(w, r, db)
})
}
sqlHandler()
从shopping_list中的表中读取记录,对其进行编辑然后更新记录。
现在据我所知,每个请求都在一个单独的goroutine上运行,并且mysql在读取或写入时锁定记录。那么,在这种情况下,此代码是否需要任何同步?
答案 0 :(得分:2)
您不需要显式同步代码,因为对db
上需要锁定的任何方法的调用将直接阻塞,直到锁定被释放。换句话说,实际需要同步的包会处理同步。
作为旁注,我建议您通过gofmt
运行代码,这将使其他阅读代码的Go疯狂。