> 백엔드 개발 > Golang > 패닉 처리에서 Go의 Named Return과 Normal Return은 어떻게 다른가요?

패닉 처리에서 Go의 Named Return과 Normal Return은 어떻게 다른가요?

Linda Hamilton
풀어 주다: 2024-11-20 11:50:10
원래의
358명이 탐색했습니다.

How Do Named and Normal Returns in Go Differ in Handling Panics?

Named Returns 일반 반환에 숨겨진 Unmask Panic

Go에서는 일반 반환과 명명된 반환의 차이가 가독성을 뛰어넘습니다. 명명된 반환을 사용하면 값을 반환하도록 수정하여 패닉 발생 시 결과에 영향을 미칠 수 있습니다.

문제

다음 코드를 고려하세요.

import (
    "fmt"
    "log"
)

func catch(err *error) {
    if r := recover(); r != nil {
        *err = fmt.Errorf("recovered panic: %v", r)
    }
}

func panicIf42(n int) {
    if n == 42 {
        panic("42!")
    }
}

func NormalReturns(n int) error {
    var err error
    defer catch(&err)
    panicIf42(n)
    return err
}

func NamedReturns(n int) (err error) {
    defer catch(&err)
    panicIf42(n)
    return
}

func main() {
    err := NamedReturns(42)
    log.Printf("NamedReturns error: %v", err)
    err = NormalReturns(42)
    log.Printf("NormalReturns error: %v", err)
}
로그인 후 복사

예기치 않게 NormalReturns는 nil을 반환합니다. NamedReturns는 오류를 반환합니다. 이 동작을 어떻게 설명할 수 있나요?

설명

NormalReturns에서 반환 값은 nil(오류의 0 값)로 초기화됩니다. PanicIf42()의 패닉으로 인해 return 문에 도달할 수 없으므로 결과 변수는 nil로 설정된 상태로 유지됩니다.

반대로 NamedReturns는 명명된 반환 변수 err을 선언합니다. 패닉이 발생하면 지연된 catch() 함수가 이 변수를 수정합니다. return 문이 실행되지 않더라도 이름이 지정된 결과 값은 보존되어 반환됩니다.

이름이 지정된 반환 기능

  • 이름이 지정된 반환을 사용하면 지연된 함수 내에서 결과 값에 액세스하고 수정할 수 있습니다.
  • 패닉으로 인해 return 문에 도달하지 못한 경우 명명된 반환 값을 계속 업데이트하고 반환할 수 있습니다.
  • 이 동작을 사용하면 패닉이 발생하는 경우에도 0이 아닌 값을 반환할 수 있습니다. .

결론

이름이 지정된 반환은 반환 값에 대한 더 많은 유연성과 제어를 제공합니다. 지연된 함수를 통해 반환 값을 수정할 수 있으며 패닉이 발생한 경우에도 지정된 값이 반환되도록 보장합니다. 이러한 미묘한 차이를 이해함으로써 개발자는 명명된 반환을 효과적으로 사용하여 예외적인 경우를 처리하고 오류 조건을 정확하게 전달할 수 있습니다.

위 내용은 패닉 처리에서 Go의 Named Return과 Normal Return은 어떻게 다른가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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