回答

收藏

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

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

Go 中应用程序登录的模式是什么?如果我有,比如说,我需要从 5 个 goroutines 登录,我应该......1 d/ @- i, J; D" F
创建一个log.Logger并传递它?
1 N4 N# G. d8 r* h' v1 g+ }! W传递一个指向那个的指针log.Logger?
# p# D: Y) H$ Q/ X% [! G( G. m每个 goroutine 或函数都应该创建一个记录器吗?6 Y* n4 G7 g0 P  T! y
我应该把记录器创建成全局变量吗?
                                                                ' i8 w* X0 @8 Y2 Q% J) {+ H" o# r
    解决方案:                                                                : K; D1 w; I' S  A' F0 X- G9 X! [
                                                                创建一个 log.Logger 并传递它?那是可能的log.Logger多个 goroutines 同时使用。$ \+ H) K2 ]+ ?0 B0 F4 z
把一个指向那个 log.Logger 的指针?log.New返回 a*Logger这通常意味着你应该把对象作为指针传递。将其作为值传递创建结构的副本(即 Logger 副本),然后多个 goroutine 可能会同时写同一个io.Writer。这可能是一个严重的问题,这取决于作者的实现。) x4 f0 P. G+ g" Y' s( e3 j
每个 goroutine 还是函数应该创建记录器?我不会为每个函数或  goroutine 创建一个单独的记录器。Goroutines(和函数)用于非常轻的任务,不会证明单独维护记录器是合理的。为项目的每个大组件创建记录器可能是个好主意。例如,如果您的项目使用 SMTP 服务发送电子邮件,所以为电子邮件服务创建一个单独的记录器听起来很好,这样你就可以单独过滤和关闭输出。
/ @: o) X( S, D2 z  l3 p6 C我应该把记录器创建成全局变量吗?这取决于你的包裹。在之前的邮件服务示例中,为您服务的每个示例设置记录器可能是一个好主意,让用户可以使用 gmail 在邮件服务中记录故障,而不是使用本地 MTA(例如 sendmail )。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则