我有一个为请求提供服务的终结点。在请求流中,终结点需要生成并发送电子邮件通知(让我们命名代码)。我希望端点异步调用 。端点不应等待 。sendEmail()sendEmail()sendEmail()代码是这样的:func (s *server) MyEndpoint(ctx context.Context, request *MyRequest) (MyResponse, error) { // other logic // async sendEmail() // end async // other logic - should not wait for the response from sendEmail return getMyResponse(), nil}我该怎么做?我意识到这可能是基本的,但我是Go的新手,并希望确保我遵循最佳实践。
1 回答
MYYA
TA贡献1868条经验 获得超4个赞
使用 go 例程可以
执行并发代码。在您的示例中,您希望在返回时获取响应。执行此操作的一种方法是使用通道。
您可以通过将一个通道传递给两个函数来做到这一点,其中一个生成数据,另一个函数使用数据。这里有一篇关于频道的很棒的文章。它看起来像这样(注意我在这里使用了interface{}类型,如果你得到了一个具体的类型,它是更可取的方式)
func (s *server) MyEndpoint(ctx context.Context, request *MyRequest) (MyResponse, error) {
// other logic
// async
c := make(chan interface{})
go sendEmail(c)
// end async
// other logic - should not wait for the response from sendEmail
// getMyResponse must happen only after sendEmail has done
return getMyResponse(c), nil
}
- 1 回答
- 0 关注
- 89 浏览
添加回答
举报
0/150
提交
取消