Go語言自定義日志函數Printf參數傳遞:如何正確格式化輸出?

Go語言自定義日志函數Printf參數傳遞:如何正確格式化輸出?

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參數傳遞問題,成功實現了自定義日志功能。

以上就是Go語言自定義日志函數Printf參數傳遞:如何正確

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享