在使用异步访问数据库时,我是否应该使用一些阻塞机制?

huangapple go评论72阅读模式
英文:

Should I use some blocking mechanisms with async access to DB

问题

我正在使用gorm和Postgres在Go中编写一个异步聊天机器人。当使用gorm数据库客户端时,我是否需要使用一些阻塞机制,或者我可以安全地避免使用互斥锁等。例如,我在不同的goroutine中使用gorm数据库客户端。类似这样的代码:

func () {

db.Update(...)

}
英文:

I'm writing an async chatbot in Go with gorm and Postgres. Should I some blocking mechanism when using the gorm db client or I may safely avoid mutexes or etc. For example, I'm using gorm db client in different goroutines. Something like:

func () {

db.Update(...)

}

答案1

得分: 2

你不需要这样做。从官方的database/sql文档(gorm封装的)中可以看到(强调添加):

返回的DB对象可以安全地被多个goroutine并发使用,并且维护着自己的空闲连接池。因此,应该只调用一次OpenDB函数。关闭DB对象很少是必要的。

英文:

You don't need to do that. From the official database/sql docs (which gorm wraps), we can see (emphasis added):

> The returned DB is safe for concurrent use by multiple goroutines and maintains its own pool of idle connections. Thus, the OpenDB function should be called just once. It is rarely necessary to close a DB.

答案2

得分: 2

你可以在Gorm网站上看到,它声明Gorm并发是安全的,因此不需要阻塞它。

英文:

As you can see on the Gorm website, it states that the Gorm concurrent is safe, therefore, there is no need to block it.

huangapple
  • 本文由 发表于 2023年3月31日 15:39:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/75896001.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定