登录
首页 >  Golang >  Go问答

为什么在设置 Logger 结构体字段时需要使用互斥体?

来源:stackoverflow

时间:2024-03-04 20:09:28 353浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《为什么在设置 Logger 结构体字段时需要使用互斥体?》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

在标准库中的以下代码中:

type Logger struct {
    mu     sync.Mutex // ensures atomic writes; protects the following fields
    prefix string     // prefix on each line to identify the logger (but see Lmsgprefix)
    flag   int        // properties
    out    io.Writer  // destination for output
    buf    []byte     // for accumulating text to write
}

mu用于设置logger的字段。 mu 也用于写入日志(l.out.write(l.buf))

为什么我们需要 mutex(mu) 来设置 logger 结构体的这些字段? mu是否可以让多个go例程执行原子写入?


解决方案


是的。正如 musync.Mutex 的注释所示,它确保原子写入并保护字段 - prefixflagoutbuf

它允许方法/函数 - SetFlags(int)Prefix()SetPrefix(string)SetOutput(io.writer)FlagsSetFlags(int)zqbendc zqb, Output(int, string) 到同时使用。上述读取/写入字段 - prefixflagoutbuf 并使用互斥锁,以便多个 goroutine 并发使用它们是安全的。

无论是使用 log.New(io.writer, string, int) 创建的自定义 Logger 还是使用全局 Logger,同一个 logger 很可能被多个 goroutine 同时使用。

理论要掌握,实操不能落!以上关于《为什么在设置 Logger 结构体字段时需要使用互斥体?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>