[go] 구조체(struct)를 사용한 에러 처리(Error Handling) 방법

에러 처리는 프로그래밍에서 중요한 부분입니다. 에러가 발생했을 때 정확한 처리 방법을 제공하지 않으면 오류가 발생하고 원하는 결과를 얻을 수 없게 됩니다. Go 언어에서는 구조체(struct)를 사용하여 간단하고 효과적인 에러 처리를 할 수 있습니다.

에러 처리를 위한 구조체 정의

Go 언어에서 에러 처리를 위해 구조체를 정의하는 방법은 다음과 같습니다.

type MyError struct {
    ErrCode int
    ErrMsg  string
}

위의 코드에서는 MyError라는 구조체를 정의하고 ErrCodeErrMsg라는 필드를 가지도록 하였습니다. ErrCode는 에러 코드를, ErrMsg는 에러 메시지를 저장하기 위한 용도로 사용됩니다.

에러 발생을 위한 함수 작성

이제 구조체를 사용하여 에러를 발생시키는 함수를 작성해보겠습니다. 아래의 코드를 참고해주세요.

func DoSomething() error {
    // 에러가 발생했을 때 MyError 구조체를 사용하여 에러를 리턴
    return &MyError{
        ErrCode: 100,
        ErrMsg:  "Something went wrong",
    }
}

위의 함수 DoSomething()MyError 구조체를 사용하여 에러를 리턴합니다. 예를 들어, 특정 조건에 따라서 에러가 발생할 수 있다고 가정했을 때, 해당 조건이 충족되면 MyError 구조체를 생성하여 리턴하면 됩니다.

에러 처리하기

이제 위에서 작성한 함수를 호출하고, 에러를 처리하는 방법을 알아보겠습니다. 아래의 코드를 참고해주세요.

func main() {
    err := DoSomething()
    if err != nil {
        // MyError 구조체로 저장된 정보를 사용하여 에러 처리
        myErr, ok := err.(*MyError)
        if ok {
            fmt.Println("Error Code:", myErr.ErrCode)
            fmt.Println("Error Message:", myErr.ErrMsg)
        } else {
            fmt.Println("Unknown Error:", err)
        }
    } else {
        // 에러가 발생하지 않았을 때의 처리
        fmt.Println("DoSomething() completed successfully")
    }
}

위의 코드에서는 DoSomething() 함수를 호출하고 리턴값을 err 변수에 저장합니다. 이후 err 변수가 nil이 아닌 경우, 즉 에러가 발생한 경우에는 errMyError 구조체로 타입 변환하여 정보를 출력합니다. 그렇지 않을 경우에는 “Unknown Error” 메시지를 출력합니다. 에러가 발생하지 않은 경우에는 “DoSomething() completed successfully”라는 메시지를 출력합니다.

위의 코드는 간단한 예제일 뿐이며, 실제로는 보다 복잡한 로직과 다양한 에러 처리 방식을 구현할 수 있습니다.

결론

Go 언어에서 구조체를 사용한 에러 처리 방법을 알아보았습니다. 구조체를 활용하면 보다 명확하고 효과적인 에러 처리를 할 수 있습니다. 에러 처리는 코드의 안정성과 신뢰성을 높이는 중요한 요소이므로, 적절한 방법으로 구현하는 것이 중요합니다.


전체 코드는 여기에서 확인할 수 있습니다.