2016-05-26 266 views
0

我想創建一個功能,其功能與fmt.Printf完全一樣,但也留下字符串與當前時間戳。理想情況下,我想重寫printf和println來完成這項工作,但第一個解決方案也可以。覆蓋printf方法

這是我做了什麼:

func output(message string, a ...interface{}) { 
    fmt.Printf(getCurrentTime() + " " + message, a) 
} 

func getCurrentTime() string { 
    t := time.Now() 
    return t.Format("[2006-01-02 15:04:05]") 
} 

但是當我傳遞變量它輸出了奇怪的結果。

我該怎麼做?

+0

有什麼奇怪的結果?你能顯示結果嗎? –

+0

'[2016-05-26 21:35:04]一些消息%!(EXTRA [] interface {} = [])' - 空接口在字符串後輸出。 – user99999

回答

3

如果要將可變元素從一個函數傳遞到另一個函數,則必須展開它們。在你的例子中,a[]interface,所以你只傳遞兩個參數到實際的fmt.Printf:消息和一個數組。

你必須糾正呼叫:

fmt.Printf(getCurrentTime() + " " + message, a...) 

一個小例子來說明發生了什麼:

func exec(args ...interface{}) { 
    fmt.Println(args) 
} 

func insert(args ...interface{}) { 
    exec(args)  // Prints [[5 42]] 
    exec(args...) // Prints [5 42] 
} 

func main() { 
    insert(5, "42") 
}