>백엔드 개발 >Golang >Go에서 정수가 오류 인터페이스를 구현할 때 fmt.Println이 5 대신 'bad error'를 인쇄하는 이유는 무엇입니까?

Go에서 정수가 오류 인터페이스를 구현할 때 fmt.Println이 5 대신 'bad error'를 인쇄하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-04 02:47:09489검색

Why Does fmt.Println Print

Golang 인터페이스: 정수를 "잘못된 오류"로 변환하는 방법 이해

Golang에서 인터페이스로 작업할 때는 다음을 구현하는 유형의 동작을 이해하는 것이 중요합니다. 오류() 메서드. 주어진 코드 조각에 예시된 대로:

type T int

func (t T) Error() string {
    return "bad error"
}

func main() {
    var v interface{} = T(5)
    fmt.Println(v) //output: bad error, not 5
}

의도는 T 유형에 대해 Error() 메서드를 정의하고 값 5를 인쇄할 것으로 예상하는 것입니다. 그러나 출력에는 놀랍게도 "잘못된 오류"가 표시됩니다. 이 현상을 명확히 하려면 fmt 패키지의 문서를 자세히 조사해야 합니다.

"피연산자가 오류 인터페이스를 구현하는 경우 Error 메서드가 호출되어 객체를 문자열로 변환한 다음 형식이 지정됩니다. (있는 경우) 동사의 요구에 따라."

추가로, "각 Printf와 유사한 함수에는 형식을 사용하지 않고 %v라고 말하는 것과 동일한 Print 함수도 있습니다. 또 다른 변형 Println은 피연산자 사이에 공백을 삽입하고 줄 바꿈을 추가합니다."

이 경우 Println()은 형식을 지정하지 않고 사용되며 이는 %v를 사용하는 것과 같습니다. T는 오류 인터페이스를 구현하므로 Error() 메서드가 호출되어 값을 "잘못된 오류"로 변환한 후 인쇄됩니다.

정수 값을 인쇄하려면 특정 형식 지정자를 활용해야 합니다. 예:

fmt.Printf("%d", v) // Will print the integer value

위 내용은 Go에서 정수가 오류 인터페이스를 구현할 때 fmt.Println이 5 대신 'bad error'를 인쇄하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.