我有以下代码:
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。
他们(Write& Flags)应该共享相同的互斥锁是否有任何理由?
答案 0 :(得分:0)
它共享互斥锁,因为Logger
在写入输出时也会读取其内部flags
字段。
当然,它可以更精确地锁定,但你必须做出一个好的案例来证明增加的复杂性。如果您需要过滤器中的标志,我会在初始化结构时将其复制。