이번 편의 목표: 잘못된 일수 입력을 패닉 대신 error로 돌려 호출자가 처리하게 합니다.
실패할 수 있는 함수는 결과와 error를 함께 돌려줍니다. 성공하면 error는 nil입니다. 호출자는 err를 확인한 뒤에 결과를 씁니다. 프로그램의 가정 자체가 깨진 버그에만 panic을 둡니다.
package main
import (
"fmt"
"strconv"
)
func parseDays(text string) (int, error) {
days, err := strconv.Atoi(text)
if err != nil {
return 0, fmt.Errorf("숫자가 아닙니다")
}
if days < 0 {
return 0, fmt.Errorf("음수는 일수가 아닙니다")
}
return days, nil
}
func main() {
days, err := parseDays("3")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(days * 100)
}3은 정수로 바뀌고 0 이상이므로 오류는 nil입니다. 출력은 300입니다. Atoi가 실패하면 숫자가 아닙니다. 를 돌려줍니다. 변환에 성공해도 음수이면 음수는 일수가 아닙니다. 를 돌려줍니다.
오류가 있는데 결과 정수를 그대로 쓰면 0이 정상 일수처럼 보입니다. if err != nil을 먼저 두는 이유가 그것입니다.
직접 해 보기
parseDays("-1")로 바꿔 음수는 일수가 아닙니다. 가 출력되는지 확인하세요.
해설
-1은 정수 변환에는 성공합니다. 그 다음 조건이 음수를 error로 돌리므로, main은 금액 대신 오류 문구를 출력합니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.