首頁 >後端開發 >Golang >當類型實作「error」介面時,為什麼「fmt.Println」會列印「錯誤錯誤」而不是整數值?

當類型實作「error」介面時,為什麼「fmt.Println」會列印「錯誤錯誤」而不是整數值?

Susan Sarandon
Susan Sarandon原創
2024-12-09 07:46:07743瀏覽

Why Does `fmt.Println` Print

為什麼介面對於自訂類型的錯誤方法會回傳「bad error」?

在 Go 中,可以使用介面為型別定義方法。當物件實作介面時,它為該介面定義的每個方法提供實作。

考慮以下範例:

type T int

func (t T) Error() string {
    return "bad error"
}

func main() {
    var v interface{} = T(5)
    fmt.Println(v) // Output: "bad error"
}

在此範例中,定義了 Error 方法對於型別 T。但是,當使用 fmt.Println 列印值 v 時,輸出是「錯誤錯誤」而不是預期的整數值 5。要理解此行為,讓我們參考fmt 包文檔:

  • 如果操作數實現了錯誤接口,則會調用Error 方法將對象轉換為字符串,然後根據動詞(如果有)要求對其進行格式化。
  • 對於每個類似 Printf 的函數,還有一個不帶格式的 Print 函數,相當於對每個函數說 %v操作數。

這種情況下使用 fmt.Println 函數,相當於 fmt.Printf("%v", v)。以下是對所發生情況的解釋:

  • 由於 T 實作了錯誤接口,因此對值 v 呼叫 Error 方法。
  • Error 方法傳回字串「bad error」。
  • 然後該字串由 %v 動詞格式化並列印為輸出。

要列印 v 的整數值,可以使用 fmt.Printf("%d",v)。

以上是當類型實作「error」介面時,為什麼「fmt.Println」會列印「錯誤錯誤」而不是整數值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn