에러의 개념
Coddy GO 여정의 기초 섹션에 포함된 레슨 — 109개 중 102번째.
Go에서 에러(errors)는 무언가 잘못되었음을 나타내는 값입니다. Go는 예외(exceptions)를 사용하는 대신 에러를 명시적으로 처리합니다.
숫자를 나눌 때 오류가 발생할 수 있는 함수를 만들어 보겠습니다:
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero")
}
return a / b, nil
}이 함수는 나눗셈의 결과와 잠재적인 오류라는 두 개의 값을 반환합니다. 나누는 수가 0이면 나눗셈을 시도하는 대신 오류 메시지를 반환합니다.
이제 함수를 사용하고 발생할 수 있는 오류를 처리해 보겠습니다:
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}이 코드를 실행한 후, 0으로 나누려고 시도했기 때문에 화면에 오류 메시지가 표시됩니다:
Error: cannot divide by zero이것은 Go의 에러 처리 패턴을 보여줍니다: 에러가 발생했는지 확인하고 (err != nil), 적절한 조치를 취합니다. 에러가 발생하지 않았다면, 결과를 안전하게 사용할 수 있습니다.
챌린지
쉬움이 챌린지에서는 Go에서 에러를 다루는 연습을 합니다. 두 숫자를 나누고, 0으로 나누려고 할 때 에러를 반환하는 함수를 만들 것입니다.
여러분의 과제는 다음과 같습니다:
- 두 개의 정수를 받아 몫과 에러를 반환하는
divide함수를 완성하세요. - 나누는 수(divisor)가 0이면, 0과 "division by zero" 메시지를 담은 에러를 반환하세요.
- 나눗셈이 유효하면, 결과와 에러에 대한
nil을 반환하세요. main함수에서 제공된 값으로divide를 호출하고 에러를 적절하게 처리하세요.
이 연습은 Go 함수가 일반적으로 결과와 에러를 어떻게 반환하는지, 그리고 그러한 에러를 어떻게 확인하고 처리하는지 보여줍니다.
치트 시트
Go에서, 에러(errors)는 무언가 잘못되었음을 나타내는 값입니다. Go는 예외(exceptions)를 사용하는 대신 에러를 명시적으로 처리합니다.
실패할 가능성이 있는 함수는 두 개의 값을 반환합니다: 결과와 잠재적인 에러입니다:
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero")
}
return a / b, nil
}에러를 처리하려면, 에러가 nil이 아닌지 확인하세요:
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}새로운 에러 메시지를 생성하려면 errors.New()를 사용하고, 에러가 발생하지 않았을 때는 nil을 반환하세요.
직접 해보기
package main
import (
"errors"
"fmt"
)
// divide는 a를 b로 나누고 그 결과를 반환합니다
// b가 0이면 에러를 반환합니다
func divide(a, b int) (int, error) {
// TODO: divide 함수를 구현하세요
// b가 0이면 0과 "division by zero" 메시지를 담은 에러를 반환하세요
// 그렇지 않으면 a/b와 에러에 nil을 반환하세요
}
func main() {
// 첫 번째 테스트 케이스
a, b := 10, 2
result, err := divide(a, b)
if err != nil {
fmt.Printf("Error: %s\n", err)
} else {
fmt.Printf("Result: %d\n", result)
}
// 두 번째 테스트 케이스
a, b = 8, 0
result, err = divide(a, b)
if err != nil {
fmt.Printf("Error: %s\n", err)
} else {
fmt.Printf("Result: %d\n", result)
}
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
기초의 모든 레슨
2변수와 기본 자료형
변수란 무엇인가`:=`를 이용한 타입 추론정수 (int)부동 소수점 수불리언 (Booleans)문자열 (Strings)제로 값 (Zero Values)상수명명 규칙요약 - 변수와 타입