亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

記錄 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 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號