登录
首页 >  Golang >  Go问答

Logger.Writer.(*os.File)(左侧非接口类型 func() io.Writer)

来源:stackoverflow

时间:2024-02-22 17:54:23 220浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《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.Writerlogger 上的一个方法,而不是一个字段:

func (l *logger) writer() io.writer

它返回给 log.New 的原始 io.writer

您正在尝试将函数 logger.writer 转换为 *os.file (然后转换为 io.closer)。相反,您需要转换返回值:

...
if file, ok := Logger.Writer().(*os.File); ok {
  ...
} else if handler, ok := Logger.Writer().(io.Closer); ok {
...

今天关于《Logger.Writer.(*os.File)(左侧非接口类型 func() io.Writer)》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>