英文:
Asynchronous patterns in go
问题
最近我在查看后端代码示例时发现,人们以同步方式执行数据库查询,例如:
result, err := db.Exec(stmt, title, content)
作为一个来自Node.js背景的人,这让我有些困扰。
我知道HTTP处理程序基本上是一个Go协程,但这样做不会阻塞整个线程直到数据库返回响应吗?
有没有异步设计模式来解决这个问题?
或者这只是Go中的一种方式?
英文:
Recently I was checking backend code examples and I see that people are executing DB queries in synchronous fashion, for example:
result, err := db.Exec(stmt, title, content)
Coming from a Nodejs background, this bothers me a bit
I understand that http handlers are pretty much a go routine, but won't this block entire thread until DB sends back a response?
Is there any asynchronous design pattern to address this problem?
Or maybe this is just a way it is in go?
答案1
得分: 3
我理解了,HTTP处理程序在Go中实际上是一个go例程,但这不会阻塞整个线程,直到数据库发送回响应。
不会。Go不是Node。在Go中没有必要像在Node中那样考虑阻塞/非阻塞,因为线程不会被“阻塞”代码阻塞。
有没有任何异步设计模式来解决这个问题?
没有,因为根本就没有问题。
或者也可以说这就是Go的方式。
英文:
> I understand that http handlers are pretty much a go routine, but won't this block entire thread until DB sends back a response?
No. Go is not Node. There is no reason to think about blocking/nonblocking in Go as threads don't get blocked by "blocking" code as in Node.
> Is there any asynchronous design pattern to address this problem?
No, because there is no problem.
> Or maybe this is just a way it is in [Go]?
Exactly.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论