此webapp代码是否需要同步?

时间:2014-04-15 19:21:47

标签: concurrency go goroutine

我现在正在学习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在读取或写入时锁定记录。那么,在这种情况下,此代码是否需要任何同步?

1 个答案:

答案 0 :(得分:2)

简答:不。

您不需要显式同步代码,因为对db上需要锁定的任何方法的调用将直接阻塞,直到锁定被释放。换句话说,实际需要同步的包会处理同步。


作为旁注,我建议您通过gofmt运行代码,这将使其他阅读代码的Go疯狂。