回答

收藏

Go 中应用程序登录的模式是什么?

技术问答 技术问答 447 人阅读 | 0 人回复 | 2023-09-12

Go 中应用程序登录的模式是什么?如果我有,比如说,我需要从 5 个 goroutines 登录,我应该......$ ]0 {) Y: _; r4 a+ x$ C. ]
创建一个log.Logger并传递它?
' X# I+ E; `5 M+ S' u0 _传递一个指向那个的指针log.Logger?' V1 v. Q! {: I5 v' \  ~
每个 goroutine 或函数都应该创建一个记录器吗?/ K, x/ w- o0 q1 K
我应该把记录器创建成全局变量吗?
                                                                : g% d$ M" n! }6 N/ ]
    解决方案:                                                               
* I. k# A& D8 S& c                                                                创建一个 log.Logger 并传递它?那是可能的log.Logger多个 goroutines 同时使用。
4 n$ }5 F/ M9 [把一个指向那个 log.Logger 的指针?log.New返回 a*Logger这通常意味着你应该把对象作为指针传递。将其作为值传递创建结构的副本(即 Logger 副本),然后多个 goroutine 可能会同时写同一个io.Writer。这可能是一个严重的问题,这取决于作者的实现。
6 n$ o  X5 Q# z0 o2 c% S每个 goroutine 还是函数应该创建记录器?我不会为每个函数或  goroutine 创建一个单独的记录器。Goroutines(和函数)用于非常轻的任务,不会证明单独维护记录器是合理的。为项目的每个大组件创建记录器可能是个好主意。例如,如果您的项目使用 SMTP 服务发送电子邮件,所以为电子邮件服务创建一个单独的记录器听起来很好,这样你就可以单独过滤和关闭输出。4 [7 z7 X) P8 t# {; s, t! `2 _
我应该把记录器创建成全局变量吗?这取决于你的包裹。在之前的邮件服务示例中,为您服务的每个示例设置记录器可能是一个好主意,让用户可以使用 gmail 在邮件服务中记录故障,而不是使用本地 MTA(例如 sendmail )。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则