concurrency - 这个webapp代码需要同步吗?

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

最佳答案

简答:否。

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


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

关于concurrency - 这个webapp代码需要同步吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23092579/

相关文章:

go - 无缓冲 channel 上的循环范围

go - 循环检查并发程序中的条件

java - 我们可以用Java实现协程类型的功能吗?

testing - 如何在不等待测试的情况下在goroutine中测试结果

go - 从 Redis 获取结构数组时解码错误

go - 如何使用Google云端硬盘Api和服务帐户获取加星标的文件?

concurrency - 使用 OpenMP 的数组中的最大值

java - ExecutorCompletionService 最多等待 n 秒完成

java - CompletionService.take().isDone() 总是 true 吗?

go - 等待所有例程完成