Go에서 예외 상황은 일반적으로 오류 인터페이스를 구현하는 오류 값을 사용하여 처리됩니다. 인터페이스의 Error() 메서드는 오류를 설명하는 문자열을 반환합니다.
그러나 사용자 정의 오류 유형으로 작업할 때는 Error() 메서드의 재귀를 피하는 것이 중요합니다.
Error() 메서드가 fmt.Sprint(e)를 호출하여 오류 값을 문자열로 변환하는 사용자 정의 오류 유형을 생각해 보세요. 이 접근 방식은 잠재적인 문제를 야기합니다.
type MyError struct { message string } func (e MyError) Error() string { return fmt.Sprint(e) }
이제 오류를 인쇄하려고 하면 무한 루프가 발생합니다.
func main() { err := MyError{"Error!"} fmt.Println(err) }
이는 fmt.Sprint(e)가 e를 호출하기 때문에 발생합니다. .Error()는 다시 fmt.Sprint(e)를 호출하는 식으로 계속됩니다.
재귀를 중단하려면 e를 fmt.Sprint에 전달하기 전에 문자열이나 오류 메서드가 없는 값으로 변환하세요.
func main() { err := MyError{"Error!"} fmt.Println(fmt.Sprint(float64(err))) }
이 예에서는 e를 변환합니다. float64에 대한 문자열 및 오류 메서드를 제거하여 무한 루프를 방지합니다.
위 내용은 Go에서 사용자 정의 오류를 처리할 때 무한 루프를 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!