> 백엔드 개발 > Golang > Go에서 `fmt.Println`이 `String()`보다 `Error()`에 우선순위를 두는 이유는 무엇입니까?

Go에서 `fmt.Println`이 `String()`보다 `Error()`에 우선순위를 두는 이유는 무엇입니까?

DDD
풀어 주다: 2024-11-20 20:09:16
원래의
622명이 탐색했습니다.

Why Does `fmt.Println` Prioritize `Error()` over `String()` in Go?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿