[go] Go 언어에서 메소드 오류 처리

Go 언어는 간결하고 효율적인 코드 작성을 지원하기 위해 설계된 프로그래밍 언어입니다. 이 언어에서는 메소드에서 발생하는 오류를 처리하는 방법에 대해 알아보겠습니다.

1. 오류 반환값 활용

Go 언어에서는 함수나 메소드에서 발생하는 오류를 반환 값으로 처리할 수 있습니다. 이를 활용하여 메소드에서 발생한 오류를 호출자에게 알려줄 수 있습니다.

type Circle struct {
    radius float64
}

// 원의 넓이를 계산하는 메소드
func (c Circle) calculateArea() (float64, error) {
    if c.radius <= 0 {
        return 0, fmt.Errorf("반지름은 양수여야 합니다")
    }

    return math.Pi * c.radius * c.radius, nil
}

func main() {
    circle := Circle{radius: -5.0}
    area, err := circle.calculateArea()

    if err != nil {
        fmt.Println("오류 발생:", err)
    } else {
        fmt.Println("원의 넓이:", area)
    }
}

위의 예시에서 calculateArea 메소드는 오류를 반환합니다. 반지름이 음수일 경우에는 오류를 반환하고, 그렇지 않은 경우에는 원의 넓이를 반환합니다. 메인 함수에서는 err 변수를 확인하여 오류가 발생했는지를 판단하고, 오류가 발생한 경우에는 오류 메시지를 출력하고, 그렇지 않은 경우에는 원의 넓이를 출력합니다.

2. 커스텀 오류 타입 정의

Go 언어에서는 커스텀 오류 타입을 정의하여 특정 오류를 더 상세하게 표현할 수 있습니다.

type NegativeRadiusError float64

func (e NegativeRadiusError) Error() string {
    return fmt.Sprintf("반지름이 음수입니다: %.2f", float64(e))
}

type Circle struct {
    radius float64
}

// 원의 넓이를 계산하는 메소드
func (c Circle) calculateArea() (float64, error) {
    if c.radius <= 0 {
        return 0, NegativeRadiusError(c.radius)
    }

    return math.Pi * c.radius * c.radius, nil
}

func main() {
    circle := Circle{radius: -5.0}
    area, err := circle.calculateArea()

    if err != nil {
        fmt.Println("오류 발생:", err)
    } else {
        fmt.Println("원의 넓이:", area)
    }
}

위의 예시에서는 NegativeRadiusError라는 이름의 커스텀 오류 타입을 정의하고, 해당 타입의 Error 메소드를 구현하여 오류 메시지를 반환하도록 했습니다. calculateArea 메소드에서 반지름이 음수인 경우에는 NegativeRadiusError를 반환하여 오류를 처리하고 있습니다.

참고 자료