序
本文主要研究一下golang的zap的WriteSyncer
![6faa92ab451e0169f99af8dfdd3eda73.png](https://img-blog.csdnimg.cn/img_convert/6faa92ab451e0169f99af8dfdd3eda73.png)
WriteSyncer
zap@v1.16.0/zapcore/write_syncer.go
type WriteSyncer interface { io.Writer Sync() error}
WriteSyncer内嵌了io.Writer接口,定义了Sync方法
Writer
/usr/local/go/src/io/io.go
type Writer interface { Write(p []byte) (n int, err error)}
Writer接口定义了Write方法
lockedWriteSyncer
zap@v1.16.0/zapcore/write_syncer.go
type lockedWriteSyncer struct { sync.Mutex ws WriteSyncer}func Lock(ws WriteSyncer) WriteSyncer { if _, ok := ws.(*lockedWriteSyncer); ok { // no need to layer on another lock return ws } return &lockedWriteSyncer{ws: ws}}func (s *lockedWriteSyncer) Write(bs []byte) (int, error) { s.Lock() n, err := s.ws.Write(bs) s.Unlock() return n, err}func (s *lockedWriteSyncer) Sync() error { s.Lock() err := s.ws.Sync() s.Unlock() return err}
lockedWriteSyncer定义了sync.Mutex及WriteSyncer属性,它实现了WriteSyncer接口,它对Write和Sync方法都加了锁,内部委托的WriteSyncer;Lock方法用于创建lockedWrite