【问题标题】:Does this webapp code need synchronization?这个 webapp 代码需要同步吗?
【发布时间】:2014-04-15 19:21:47
【问题描述】:

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

【问题讨论】:

    标签: concurrency go goroutine


    【解决方案1】:

    简短回答:不。

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


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多