go - log.Flags() 应该与 write 共享相同的 sync.Mutex 吗?

标签 go

我有以下代码:

package main

import(
    "log"
    "os"
)

type LogFilter struct {}

func (t *LogFilter) Write(p []byte) (int, error) {
    _ = log.Flags()
    return os.Stderr.Write(p)
}

func main() {
    log.SetOutput(&LogFilter{})
    log.Println("Hello, playground")
}

哪些死锁是因为 http://golang.org/src/pkg/log/log.go第 135 行将锁定推迟到写入之后。在本文中,我正在调用试图获取锁的 Flags。

是否有任何理由认为它们(写入和标志)应该共享相同的互斥量?

最佳答案

它共享互斥量,因为 Logger 在写入输出时也会读取其内部的 flags 字段。

虽然它可以更精细地锁定,但您必须提供一个很好的案例来证明增加的复杂性是合理的。如果您需要过滤器中的标志,我会在您初始化结构时复制它们。

关于go - log.Flags() 应该与 write 共享相同的 sync.Mutex 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26041849/

相关文章:

go - 视频流优化

go - ioutil.ReadAll替代方案,仅使用数据,而无需复制字节数组

json - exec.Command 使用 JSON 负载转义变量

go - 将二维 slice 传递给 Golang 函数参数

go - Golang rest如何输出json格式错误,具体引用坏字段

go - 难道windows cmd会过滤掉一些特殊符号?

go - Go 中连接前导零的惯用方法

ssl - golang JWT 无签名。 "crypto/rsa: verification error"

search - 如何通过基本名称(不带扩展名)检查文件是否存在?

go - 从zip.NewWriter返回io.ReadCloser