>백엔드 개발 >Golang >Go Named 반품과 일반 반품: 패닉 처리 방법이 왜 다른가요?

Go Named 반품과 일반 반품: 패닉 처리 방법이 왜 다른가요?

Susan Sarandon
Susan Sarandon원래의
2024-12-07 03:31:10762검색

Go Named Returns vs. Normal Returns: Why Does Panic Handling Differ?

일반 반환이 패닉을 숨기는 반면 명명된 반환은 호출자에게 패닉을 제공하는 이유

Go에서 명명된 결과 매개변수를 사용하면 패닉이 반환할 특정 값을 할당할 수 있습니다. 기능. 그러나 이 동작은 명명된 결과 매개변수 없이 반환하는 함수와 다르므로 의문이 생길 수 있습니다.

NormalReturns 및 NamedReturns가 패닉 발생 시 오류를 반환하려고 시도하는 함수인 다음 코드를 고려하세요.

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
}

panicIf42에서 패닉이 발생하면 오류가 예상되더라도 NormalReturns는 nil을 반환합니다. 이는 패닉이 호출자에게 제어권을 반환한 후 지연된 catch 함수가 오류를 할당하기 때문에 발생합니다.

반대로 NamedReturns는 명명된 결과 매개 변수를 통해 지연된 함수가 이를 수정할 수 있도록 허용하므로 수정된 err 값을 반환합니다. 패닉이 발생하면 지연된 catch 함수가 오류를 할당하고, 이 오류는 함수가 종료될 때 보존되어 반환됩니다.

Return 문 사양:

"모든 결과 값은 함수에 들어갈 때 해당 유형의 0 값으로 초기화됩니다. 결과를 지정하는 'return' 문은 지연된 함수가 실행되기 전에 결과 매개변수를 설정합니다. 실행됩니다."

지연 문 사양:

"지연 함수는 반환되기 전에 결과 매개 변수에 액세스하고 수정할 수 있습니다."

따라서, NormalReturns에서는 명명된 결과 매개 변수가 없으므로 반환 값은 nil로 초기화되고 패닉 이후에는 nil로 유지됩니다. NamedReturns에서 deferred 함수는 err 결과 매개변수를 수정하고 해당 값은 반환된 오류로 사용됩니다.

위 내용은 Go Named 반품과 일반 반품: 패닉 처리 방법이 왜 다른가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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