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