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