我不能從下面的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 main
import (
"fmt"
stlog "log"
"os"
)
var log *stlog.Logger
type fileLog string
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)
}
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)
}
uj5u.com熱心網友回復:
記錄器將日志訊息寫入一個io.Writer,這是一個定義為的介面:
type Writer interface {
Write([]byte) (int,error)
}
該fileLog型別實作了io.Writer介面,您將其設定為新記錄器的輸出。因此,每當記錄器嘗試寫入日志時,它都會呼叫其撰寫器的Write函式,即fileLog.Write.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/422113.html
標籤:
上一篇:消除函式中多個條件檢查的優雅方法
下一篇:如何獲取陣列中字串的索引?
