Go의 다단계 추상화 오류 처리
다단계 추상화의 오류 처리는 오류가 반복적으로 전달되면 번거로울 수 있습니다. 체인이 중복되어 로그가 중복되고 컨텍스트가 손실됩니다.
주석 달기 오류
오류에 주석을 다는 것이 권장되는 접근 방식입니다. 여기에는 원래 오류를 래핑하는 새로운 오류 값을 생성하여 추가 컨텍스트를 제공하는 작업이 포함됩니다. 오류 패키지는 이 목적을 위해 Wrap() 및 Cause() 함수를 제공합니다.
주어진 예에서:
// ObjectThreeHiggerLevel func (oTh *ObjectThreeHiggerLevel) CheckObjectTwoIsReady() error { if err := oTh.ObjectTwoHigherLevel.CheckObjectOneIsReady(); err != nil { return errors.Wrap(err, "Object3 illegal state: Object2 is invalid") } return nil }
ObjectThreeHiggerLevel은 추가 컨텍스트로 ObjectTwoHigherLevel의 오류에 주석을 답니다.
"연장" 오류
대체 접근 방식은 fmt.Errorf()를 사용하여 오류를 "확장"하는 것입니다. 오류 래핑 해제 기능은 제공하지 않지만 추가된 컨텍스트로 사용자 정의 오류 메시지를 생성할 수 있습니다.
// ObjectThreeHiggerLevel func (oTh *ObjectThreeHiggerLevel) CheckObjectTwoIsReady() error { if err := oTh.ObjectTwoHigherLevel.CheckObjectOneIsReady(); err != nil { return fmt.Errorf("Object3 illegal state: %v", err) } return nil }
오류 위임 또는 처리
오류 처리 시 , 처리할지, 아니면 더 높은 수준에 위임할지 결정하는 것이 중요합니다. 오류가 처리되지 않으면 정보 손실이나 중복 로그 발생을 방지하기 위해 추가된 컨텍스트로 위임해야 합니다.
예제에서:
// ObjectThreeHiggerLevel func (oTh *ObjectThreeHiggerLevel) CheckObjectTwoIsReady() error { if err := oTh.ObjectTwoHigherLevel.CheckObjectOneIsReady(); err != nil { if err := oTh.HandleError(err); err != nil { // Error handling failed, log and return original error return errors.Wrapf(err, "Object3 failed to handle error: %v", err) } return nil } return nil }
이 예에서 HandleError()는 다음을 시도합니다. 오류를 처리합니다. 실패하면 원래 오류가 래핑되어 반환됩니다.
중복 로그 방지
오류에 컨텍스트를 추가하거나 확장하면 오류가 스택 위로 전파될 때 여기에는 의미 있는 로깅 및 오류 처리에 필요한 모든 정보가 포함되어 있습니다. 이를 통해 로그 중복을 방지하고 문제의 근본 원인을 파악하는 데 도움이 됩니다.
위 내용은 Go의 다단계 추상화에서 오류를 어떻게 효과적으로 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!