我不能从下面的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
.
- 1 回答
- 0 关注
- 94 浏览
添加回答
举报
0/150
提交
取消