에러의 개념
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 함수가 일반적으로 결과와 에러를 어떻게 반환하는지, 그리고 그러한 에러를 어떻게 확인하고 처리하는지 보여줍니다.
직접 해보기
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)상수명명 규칙요약 - 변수와 타입