go - Logger.Writer.(*os.File) (左侧的非接口类型 func() io.Writer)
问题描述
初始化记录器后:
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
转换为 a *os.File
(然后转换为 a io.Closer
)。相反,您需要转换返回值:
...
if file, ok := Logger.Writer().(*os.File); ok {
...
} else if handler, ok := Logger.Writer().(io.Closer); ok {
...
推荐阅读
- android - 如何在 Android Studio 中添加/减去两个日历对象
- python - 使用其中一列中的值索引 pandas 数据框
- autodesk-designautomation - 如何将 json 有效负载传递给 Revit DesignAutomation 插件?需要样品
- sql - 计算相邻行之间的时间差
- database - 数据库 - 软删除或分离的日志表
- python - 如何使用 DJango 从 HTML 按钮调用特定的 python 脚本/程序
- javascript - 我的引导视图模式上出现的单词“数组”
- ios - 使用 NSCoding 使用更多数组数据更新 iOS 存储数据
- wordpress - 301 重定向,对路径和文件名进行重大更改
- java - Spring boot:由于输入结束,没有要映射的内容