Home > Article > Backend Development > Why Does Go\'s `fmt` Package Prioritize `Error()` Over `String()` When Printing?
Prioritization of Error() over String()
In Go, the fmt package handles printing operations. When an object has both Error() and String() methods implemented, the Error() method takes precedence over String() for printing purposes.
This prioritization stems from the practical significance of errors. Errors are typically more important to convey than general string representations. Therefore, if an object implements the error interface, its Error() method is used for formatting and printing.
This behavior is documented in the package documentation for fmt. The following excerpt explains the precedence order:
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).
Example
Consider the following code:
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) }
In this example, the Person type implements both String() and Error() methods. When the fmt.Println() function is called, the Error() method is invoked instead of String(), resulting in the following output:
Failed Failed
This demonstrates the prioritization of Error() over String() in Go's printing functionality.
The above is the detailed content of Why Does Go\'s `fmt` Package Prioritize `Error()` Over `String()` When Printing?. For more information, please follow other related articles on the PHP Chinese website!