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 문이 실행되지 않더라도 이름이 지정된 결과 값은 보존되어 반환됩니다.
이름이 지정된 반환은 반환 값에 대한 더 많은 유연성과 제어를 제공합니다. 지연된 함수를 통해 반환 값을 수정할 수 있으며 패닉이 발생한 경우에도 지정된 값이 반환되도록 보장합니다. 이러한 미묘한 차이를 이해함으로써 개발자는 명명된 반환을 효과적으로 사용하여 예외적인 경우를 처리하고 오류 조건을 정확하게 전달할 수 있습니다.
위 내용은 패닉 처리에서 Go의 Named Return과 Normal Return은 어떻게 다른가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!