首頁 >後端開發 >Golang >為什麼 Go 中 `fmt.Println` 喜歡 `Error()` 而不是 `String()`?

為什麼 Go 中 `fmt.Println` 喜歡 `Error()` 而不是 `String()`?

Susan Sarandon
Susan Sarandon原創
2024-11-30 04:22:11681瀏覽

Why Does `fmt.Println` Prefer `Error()` Over `String()` in Go?

Error() 覆寫fmt.Println 中的String()

在Go 程式語言中,當一個型別同時實作String()和Error() 方法中,fmt.Println 函數優先於Error()。這表示如果這兩種方法都是針對特定類型實作的,則 fmt.Println 將使用 Error() 產生的輸出。

要理解為什麼會出現這種情況,請務必查看以下文件: fmt 套件。根據文檔,有特定的規則來管理 fmt 如何格式化不同類型的資料。這些規則按以下順序應用:

  1. 如果資料實作了 Formatter 接口,則使用 Formatter 方法來格式化資料。
  2. 如果使用 %#v 格式並且資料實作了GoStringer接口,則使用GoStringer方法來格式化資料。
  3. 如果資料實作了error接口,則Error方法為用於格式化資料。
  4. 如果資料實作了 String() 方法,則使用 String() 方法來格式化資料。

在提供的範例中,Person type 實作了 String() 和 Error() 方法。但是,當呼叫 fmt.Println 函數列印 Person 類型時,會呼叫 Error() 方法而不是 String() 方法。這是因為根據 fmt 套件文件中概述的規則,Error() 方法優先於 String() 方法。

因此,當一個類型同時實作 String() 和 Error() 方法時, fmt.Println 函數將始終使用 Error() 方法的輸出。這是因為按照格式化規則的順序,Error() 方法的排名高於 String() 方法。

以上是為什麼 Go 中 `fmt.Println` 喜歡 `Error()` 而不是 `String()`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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