首頁 > 後端開發 > Golang > 為什麼 Go 的 `fmt` 套件在列印時優先考慮 `Error()` 而不是 `String()`?

為什麼 Go 的 `fmt` 套件在列印時優先考慮 `Error()` 而不是 `String()`?

Barbara Streisand
發布: 2024-11-24 02:33:10
原創
927 人瀏覽過

Why Does Go's `fmt` Package Prioritize `Error()` Over `String()` When Printing?

Error() 優先於 String()

在 Go 中,fmt 套件處理列印作業。當一個物件同時實作了 Error() 和 String() 方法時,出於列印目的,Error() 方法優先於 String()。

這種優先權源自於錯誤的實際意義。錯誤通常比一般的字串表示更重要。因此,如果一個物件實現了錯誤接口,則其 Error() 方法用於格式化和列印。

此行為記錄在 fmt 的包裝文件中。以下摘錄解釋了優先順序:

3. If an operand implements the error interface, the Error method will be invoked to convert the object to a string, which will then be formatted as required by the verb (if any).
4. If an operand implements method String() string, that method will be invoked to convert the object to a string, which will then be formatted as required by the verb (if any).
登入後複製

範例

考慮以下程式碼:

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)
}
登入後複製

在此範例中,Person type 實作🎜>

Failed Failed
登入後複製
在此範例中,Person type 實作🎜>

在此範例中,Person type 實作了String() 和Error() 方法。當呼叫fmt.Println() 函數時,將呼叫Error() 方法而不是String(),從而產生以下輸出:這示範了Error() 優先於String( ) 在Go 的列印功能中。

以上是為什麼 Go 的 `fmt` 套件在列印時優先考慮 `Error()` 而不是 `String()`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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