[go] go 언어의 에러 처리
Go 언어는 강력하고 유연한 에러 처리 메커니즘을 제공합니다. 이를 통해 코드에서 발생하는 에러를 쉽게 식별하고 처리할 수 있습니다. 이번 글에서는 Go 언어에서의 에러 처리 방법과 관련된 내용에 대해 알아보겠습니다.
1. 에러 정의하기
Go에서 에러는 error
타입을 가집니다. 보통 다음과 같은 방식으로 에러를 정의합니다.
package main
import (
"errors"
"fmt"
)
func divide(x, y int) (int, error) {
if y == 0 {
return 0, errors.New("division by zero")
}
return x / y, nil
}
func main() {
result, err := divide(6, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
}
위의 예시에서 divide
함수는 두 정수를 나누고 그 결과를 반환합니다. 만약 두 번째 인자인 y
가 0이라면 에러를 반환하는데, 이때 errors.New
함수를 사용하여 에러 메시지를 생성하여 반환하게 됩니다.
2. 에러 처리하기
파생된 에러를 처리하거나 새로운 에러를 생성하고자 할 때 errors.New
함수보다 fmt.Errorf
함수를 사용하는 것이 더 유용할 수 있습니다.
package main
import (
"fmt"
)
func divide(x, y int) (int, error) {
if y == 0 {
return 0, fmt.Errorf("division by zero, y is %d", y)
}
return x / y, nil
}
func main() {
result, err := divide(6, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
}
fmt.Errorf
함수를 사용하면 포맷 문자열과 함께 에러 메시지를 생성하여 반환할 수 있어 가독성이 좋아집니다.
3. 커스텀 에러 타입 정의하기
좀 더 구체적인 에러 처리를 위해 커스텀 에러 타입을 정의하여 사용할 수도 있습니다.
package main
import (
"fmt"
)
type myError struct {
message string
}
func (e *myError) Error() string {
return e.message
}
func divide(x, y int) (int, error) {
if y == 0 {
return 0, &myError{"division by zero"}
}
return x / y, nil
}
func main() {
result, err := divide(6, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
}
위의 예시에서 myError
타입을 정의하여 사용하고 있습니다. 이러한 방식으로 커스텀 에러 타입을 정의하면 보다 구체적인 에러 처리가 가능해집니다.
Go 언어에서의 에러 처리는 유연하고 강력한데, 위에서 언급한 방법들을 사용하여 코드의 안정성을 높일 수 있습니다.
이상으로 Go 언어의 에러 처리에 대한 내용을 알아보았습니다. 어떠한 문제가 발생할지에 대비하여 적절한 에러 처리를 하여 안정적인 코드를 작성할 수 있도록 노력해 보세요.