如何异步发送电子邮件?

我有一个为请求提供服务的终结点。在请求流中,终结点需要生成并发送电子邮件通知(让我们命名代码)。我希望端点异步调用 。端点不应等待 。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的新手,并希望确保我遵循最佳实践。


胡子哥哥
浏览 90回答 1
1回答

MYYA

使用 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}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go