>백엔드 개발 >Golang >Go에서 지연된 함수의 잘못된 반환 값을 어떻게 처리할 수 있나요?

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

Linda Hamilton
Linda Hamilton원래의
2024-11-01 22:53:02417검색

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

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

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

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

<code class="go">defer func() {
    if err := r.Body.Close(); err != nil {
        // Handle the error
    }
}()</code>

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

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

<code class="go">func Check(f func() error) {
    if err := f(); err != nil {
        // Handle the error
    }
}</code>

이 도우미 함수를 사용하여 여러 함수를 연기하고 해당 반환 값을 확인할 수 있습니다.

<code class="go">defer Check(r.Body.Close)
defer Check(SomeOtherFunc)</code>

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

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

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

<code class="go">defer Checks(r.Body.Close, SomeOtherFunc)</code>

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

위 내용은 Go에서 지연된 함수의 잘못된 반환 값을 어떻게 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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