"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go에서 지연된 함수의 잘못된 반환 값을 어떻게 처리할 수 있나요?

Go에서 지연된 함수의 잘못된 반환 값을 어떻게 처리할 수 있나요?

2024-11-03에 게시됨
검색:118

How can I handle erroneous return values from deferred functions in Go?

Go에서 잘못된 반환 값이 있는 지연된 함수 처리

gometalinter 및 errcheck는 변수를 반환하는 함수가 오류 없이 지연될 때 정당하게 경고를 발생시킵니다. 반환된 오류를 확인합니다. 이로 인해 처리되지 않은 오류 및 잠재적인 런타임 문제가 발생할 수 있습니다.

이 시나리오를 처리하는 관용구는 함수 자체를 연기하는 것이 아니라 반환된 값을 확인하는 다른 함수에 함수를 래핑하는 것입니다. 예는 다음과 같습니다.

defer func() {
    if err := r.Body.Close(); err != nil {
        // Handle the error
    }
}()

익명 함수를 사용하면 지연된 함수의 반환 값을 캡처하고 발생하는 모든 오류를 처리할 수 있습니다.

또는 도우미 함수를 만들어 프로세스를 단순화할 수 있습니다. :

func Check(f func() error) {
    if err := f(); err != nil {
        // Handle the error
    }
}

이 도우미 함수는 여러 함수를 연기하여 반환 값이 확인되도록 할 수 있습니다.

defer Check(r.Body.Close)
defer Check(SomeOtherFunc)

도우미 기능을 확장하여 여러 기능을 허용할 수도 있습니다.

func Checks(fs ...func() error) {
    for i := len(fs) - 1; i >= 0; i-- {
        if err := fs[i](); err != nil {
            // Handle the error
        }
    }
}

이를 사용하면 여러 기능을 연기하고 보다 간결하고 체계적인 방식으로 해당 오류를 처리할 수 있습니다.

defer Checks(r.Body.Close, SomeOtherFunc)

오류가 올바른 순서로 처리되도록 하기 위해 Checks() 함수는 하향 루프를 사용하여 선언의 역순으로 함수를 실행합니다. 이는 마지막 지연된 함수가 먼저 실행되는 지연된 함수의 실행 순서와 일치합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3