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