fmt.Println에서 String()에 대한 Error()의 우선 순위
Go에서 fmt.Println을 사용하여 객체를 인쇄할 때 String () 메소드는 일반적으로 인쇄를 위해 객체를 문자열로 변환하는 데 사용됩니다. 그러나 어떤 경우에는 Error() 메서드가 String()보다 우선합니다.
이 동작은 fmt.Println 구현에 의해 정의됩니다. 패키지 문서에는 객체가 오류 인터페이스를 구현하는 경우 Error() 메서드가 호출되어 객체를 문자열로 변환한다고 명시되어 있습니다. 그런 다음 이 문자열은 동사(있는 경우)의 요구에 따라 형식화됩니다.
실제로는 오류가 더 중요한 것으로 간주되므로 Error()의 구현이 String()보다 더 높은 우선순위를 갖습니다. 이렇게 하면 사용자 정의 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) }
이 예에서는 두 가지 모두 개인 유형은 String() 및 Error() 메소드를 구현합니다. 그러나 fmt.Println을 사용하여 객체를 인쇄하면 String() 대신 Error() 메서드가 호출되어 다음과 같은 결과가 출력됩니다.
Failed Failed
이는 Error()가 다음보다 우선 순위가 높기 때문입니다. fmt.Println의 String()을 사용하여 오류가 명확하게 표시되도록 합니다.
따라서 Error()와 String()을 모두 구현하는 객체로 작업할 때 원하는 출력을 고려하고 조정하는 것이 중요합니다. 이에 따라 구현합니다.
위 내용은 Go에서 `fmt.Println`이 `String()`보다 `Error()`에 우선순위를 두는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!