> 백엔드 개발 > Golang > Go에서 사용자 정의 오류를 처리할 때 무한 루프를 방지하려면 어떻게 해야 합니까?

Go에서 사용자 정의 오류를 처리할 때 무한 루프를 방지하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2024-12-13 16:06:14
원래의
852명이 탐색했습니다.

How Can I Prevent Infinite Loops When Handling Custom Errors in Go?

비재귀적 오류 처리: 무한 루프 방지

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

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