为了账号安全,请及时绑定邮箱和手机立即绑定

如何异步发送电子邮件?

如何异步发送电子邮件?

Go
胡子哥哥 2022-08-30 21:40:27
我有一个为请求提供服务的终结点。在请求流中,终结点需要生成并发送电子邮件通知(让我们命名代码)。我希望端点异步调用 。端点不应等待 。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

}


查看完整回答
反对 回复 2022-08-30
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信