>  기사  >  백엔드 개발  >  Go의 Named Return은 일반 Return과 다르게 패닉을 어떻게 처리합니까?

Go의 Named Return은 일반 Return과 다르게 패닉을 어떻게 처리합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-20 02:14:02725검색

How Do Named Returns in Go Handle Panics Differently Than Normal Returns?

Named Return이 호출자에게 올바르게 제공하는 패닉을 일반 반환이 숨길 수 있는 이유는 무엇입니까?

Go에서 return 문은 모든 것을 초기화합니다. 지연된 함수를 실행하기 전에 결과 매개변수를 0 값으로 설정합니다. 명명된 결과 매개변수가 있고 반환 문에 도달하지 않은 경우 이러한 명명된 매개변수는 0 값을 유지합니다.

이 동작은 제공된 예에서 설명됩니다.

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

여기서 err 변수는 nil로 초기화되지만 패닉으로 인해 return 문에 도달하지 못하므로 nil로 유지됩니다. defer catch()가 err을 수정하더라도 return 문이 빈 표현식 목록을 지정하기 때문에 이 변경 사항은 반환된 값에 반영되지 않습니다.

반대로 명명된 반환을 사용하면 지연된 함수가 반환 후 반환 값을 수정할 수 있습니다. 진술하고 발신자에게 돌아오기 전에. 이는 다음 함수에 예시되어 있습니다.

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

이 경우 err은 nil로 초기화되지만 지연된 catch()는 함수가 반환되기 전에 이를 수정할 수 있습니다. 결과적으로 err에 할당된 0이 아닌 값은 호출자에게 반환됩니다.

이 동작은 명명된 반환과 일반 반환 간의 주요 차이점을 강조합니다. 이름이 지정된 반환을 사용하면 지연된 함수가 반환 값을 변경할 수 있으므로 패닉이 발생하는 경우에도 관련 정보가 호출자에게 다시 전파되도록 할 수 있습니다.

위 내용은 Go의 Named Return은 일반 Return과 다르게 패닉을 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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