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 중국어 웹사이트의 기타 관련 기사를 참조하세요!