>백엔드 개발 >Golang >Multi-Layer Go 추상화에서 오류 전파를 효과적으로 처리하려면 어떻게 해야 합니까?

Multi-Layer Go 추상화에서 오류 전파를 효과적으로 처리하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-12 18:21:11665검색

How Can I Effectively Handle Error Propagation in Multi-Layer Go Abstractions?

다층 추상화의 오류 전파

Go에서는 여러 수준의 추상화에 걸친 오류 처리가 어려울 수 있습니다. 계속해서 오류를 위쪽으로 전달합니다. 이로 인해 로깅 메시지가 중복되거나 상황별 정보가 손실되는 경우가 많습니다.

권장 해결 방법: 오류 주석

선호되는 오류 처리 방법은 오류를 있는 그대로 주석으로 표시하는 것입니다. 다양한 추상화 수준을 거쳤습니다. 이를 통해 각 수준에서 추가 정보를 추가하는 동시에 원래 오류의 컨텍스트를 유지할 수 있습니다.

"github.com/pkg/errors"와 같은 라이브러리를 사용하면 오류 처리를 다음과 같이 구현할 수 있습니다. 다음:

// Wraps the original error with additional context.
func (o *ObjectOne) CheckValue() error {
    if o.someValue == 0 {
        return errors.New("Object1 illegal state: value is 0")
    }
    return nil
}

// Annotates the original error with context.
func (oT *ObjectTwoHigherLevel) CheckObjectOneIsReady() error {
    if err := oT.objectOne.CheckValue(); err != nil {
        return errors.Wrap(err, "Object2 illegal state: Object1 is invalid")
    }
    return nil
}

// Preserves the annotated error stack.
func (oTh *ObjectThreeHiggerLevel) CheckObjectTwoIsReady() error {
    if err := oTh.ObjectTwoHigherLevel.CheckObjectOneIsReady(); err != nil {
        return errors.Wrap(err, "Object3 illegal state: Object2 is invalid")
    }
    return nil
}

사용:

o3 := &ObjectThreeHiggerLevel{}
if err := o3.CheckObjectTwoIsReady(); err != nil {
    fmt.Println(err)
}

출력:

Object3 illegal state: Object2 illegal state: Object1 illegal state: value is 0

이 접근 방식은 중복 로깅을 방지하고 상황에 맞는 정보를 보존하는 유익한 오류 처리 메커니즘

대안: 오류 확장

간단함을 위해 대체 접근 방식은 다음을 사용하여 추가 컨텍스트로 원래 오류를 확장하는 것입니다. fmt.Errorf():

func (o *ObjectOne) CheckValue() error {
    if o.someValue == 0 {
        return fmt.Errorf("Object1 illegal state: value is %d", o.someValue)
    }
    return nil
}

사용법:

o3 := &ObjectThreeHiggerLevel{}
if err := o3.CheckObjectTwoIsReady(); err != nil {
    fmt.Println(err)
}

출력:

Object3 illegal state: Object2 illegal state: Object1 illegal state: value is 0

이것 접근 방식은 오류 주석보다 덜 다양하지만 구현이 더 간단합니다.

위 내용은 Multi-Layer Go 추상화에서 오류 전파를 효과적으로 처리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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