首頁 > 後端開發 > Golang > 當兩者都實作時,為什麼 Go 的 `fmt` 套件更喜歡 `Error()` 而不是 `String()`?

當兩者都實作時,為什麼 Go 的 `fmt` 套件更喜歡 `Error()` 而不是 `String()`?

Mary-Kate Olsen
發布: 2024-11-28 10:58:11
原創
195 人瀏覽過

Why Does Go's `fmt` Package Prefer `Error()` Over `String()` When Both Are Implemented?

Go 中 Error() 優先於 String()

在 Go 中,fmt 套件根據值的類型處理列印值。當物件同時實作 Error() 和 String() 方法時,Error() 方法優先。這種行為源自於 fmt 的實現,它優先處理錯誤。

根據 fmt 套件文檔,如果操作數實現了 error 接口,則會先調用 Error() 方法將物件轉換為字串應用任何格式。此邏輯會覆寫 String() 方法,預設情況下,實作該方法的運算元會呼叫該方法。

以下程式碼示範了此行為:

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func (p *Person) String() string {
    return fmt.Sprintf("%v (%v years)", p.Name, p.Age)
}

func (p *Person) Error() string {
    return fmt.Sprintf("Failed")
}

func main() {
    a := &Person{"Arthur Dent", 42}
    z := &Person{"Zaphod Beeblebrox", 9001}
    fmt.Println(a, z)
}
登入後複製

輸出:

Failed Failed
登入後複製

在此範例中,即使Person 類型同時實現了String() 和Error(), fmt.Println 函數為兩個人印出“失敗”,因為Error()方法優先。這是因為錯誤被認為更嚴重,需要立即關注。

以上是當兩者都實作時,為什麼 Go 的 `fmt` 套件更喜歡 `Error()` 而不是 `String()`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板