我目前正在学习 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 在读取或写入记录时会锁定该记录。那么,在这种情况下,这段代码是否需要任何同步?
最佳答案
简答:否。
您不需要显式地同步您的代码,因为对 db
上需要锁的任何方法的调用将简单地阻塞,直到锁被释放。换句话说,同步由实际需要同步的包负责。
作为旁注,我建议通过 gofmt
运行您的代码,这会让阅读您代码的其他 Go 疯子高兴。
关于concurrency - 这个webapp代码需要同步吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23092579/