go語言自定義日志函數:printf參數傳遞及格式化輸出詳解
在Go語言開發中,自定義日志函數能有效提升日志管理效率。本文將分析一個常見的log.Printf函數參數傳遞問題,并提供解決方案。
問題:
開發者為了靈活控制日志輸出,封裝了log.Printf函數,創建了debugf函數。但實際使用中,輸出結果與預期不符。
立即學習“go語言免費學習筆記(深入)”;
原始代碼:
package main import "log" func main() { debugf("我叫%s,今年%d", "jim", 18) } func debugf(str string, arg ...Interface{}) { if true { log.Printf(str+"n", arg) // 問題在此行 } }
輸出結果:
2021/12/17 16:35:16 我叫[jim %!s(int=18)],今年%!d(missing)
與預期“我叫jim,今年18”差異明顯。原因在于log.Printf的參數傳遞方式。
分析與解決方案:
log.Printf的第二個參數期望的是一個展開的可變參數列表(…interface{})。原始代碼中,arg作為一個整體傳遞,而非將其元素分別傳遞。
正確代碼應將arg展開:
log.Printf(str+"n", arg...) // 正確的參數傳遞方式
通過arg…,我們將arg中的每個元素作為獨立參數傳遞給log.Printf,實現正確格式化輸出。修改后的debugf函數:
func debugf(str string, arg ...interface{}) { if true { log.Printf(str+"n", arg...) } }
修改后輸出:
2021/12/17 16:35:16 我叫jim,今年18
通過此修改,解決了log.Printf參數傳遞問題,成功實現了自定義日志功能。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦