为了账号安全,请及时绑定邮箱和手机立即绑定

记录 printf 和写入连接

记录 printf 和写入连接

Go
DIEA 2022-10-31 15:38:40
我不能从下面的golang代码中获得生命,为什么当你在底部调用write函数时,func write(message string) {    log.Printf("%v\n", message)}为什么 log.Printf 调用下面的方法func (fl fileLog) Write(data []byte) (int, error ) {    fmt.Println("does this ever get called?")    f, err := os.OpenFile(string(fl), os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600)    if err != nil {        return 0, err    }    defer f.Close()    return f.Write(data)}Logger 的 printf 定义如下 func (*Logger) Printf ¶func (l *Logger) Printf(format string, v ...interface{})-- 下面是完整代码,请有人向我解释一下为什么会这样--package mainimport (    "fmt"    stlog "log"    "os")var log *stlog.Loggertype fileLog stringfunc (fl fileLog) Write(data []byte) (int, error ) {    fmt.Println("does this ever get called?")    f, err := os.OpenFile(string(fl), os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600)    if err != nil {        return 0, err    }    defer f.Close()    return f.Write(data)}func registerHandlers() {    var msgRaw = "how are you"    write(msgRaw)}func run(destination string) {    log =  stlog.New(fileLog(destination), "", stlog.LstdFlags)}func main() {    fmt.Println("here we go")    run("../test.log")    registerHandlers()}func write(message string) {    log.Printf("%v\n", message)}
查看完整描述

1 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

记录器将日志消息写入一个io.Writer,这是一个定义为的接口:

type Writer interface {
   Write([]byte) (int,error)}

fileLog类型实现了io.Writer接口,您将其设置为新记录器的输出。因此,每当记录器尝试写入日志时,它都会调用其编写器的Write函数,即fileLog.Write.


查看完整回答
反对 回复 2022-10-31
  • 1 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信