初始化记录器后:
var Logger *log.Logger
f, err := os.OpenFile("somefile", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
Logger = log.New(f, "prefix: ", log.LstdFlags)
我想关闭记录器的目标文件:
func main() {
// Close log writer on exit
defer func(){
if file, ok := Logger.Writer.(*os.File); ok {
file.Sync()
file.Close()
} else if handler, ok := Logger.Writer.(io.Closer); ok {
handler.Close()
}
}()
// ...
}
但是
Logger.Writer.(*os.File)
语法给出错误: invalid type assertion: Logger.Writer.(*os.File) (non-interface type func() io.Writer on left)
如何关闭记录器的目标文件?
最佳答案
该错误几乎为您说明了: Logger.Writer
是 Logger
上的一种方法,而不是字段:
func (l *Logger) Writer() io.Writer
它返回原始 io.Writer
给 log.New
.您正在尝试转换 功能
Logger.Writer
到 *os.File
(然后到 io.Closer
)。相反,您需要转换返回值:...
if file, ok := Logger.Writer().(*os.File); ok {
...
} else if handler, ok := Logger.Writer().(io.Closer); ok {
...
关于go - Logger.Writer.(*os.File) (左侧的非接口(interface)类型 func() io.Writer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62640978/