한 눈에 끝내는 고랭 기초
    • 01
      시작하기에 앞서
    • 강의대상
      Go란?
      실습 환경 구축 - 구름IDE
      Hello goorm! 출력해보기
    • 02
      변수와 상수
    • 콘솔 출력 함수의 기본
      변수의 선언과 초기화
      상수의 선언과 초기화
      간단한 덧셈
      잘못된 신상정보
    • 03
      연산자
    • 연산자 종류
      연산자 우선순위
      콘솔 입력 함수의 기본
      간단한 덧셈과 곱셈
      몫과 나머지
    • 04
      자료형
    • 자료형의 종류와 특징
      문자열의 표현
      자료형의 변환
      강제 형 변환
    • 05
      콘솔 출력과 입력 함수
    • 콘솔 출력 함수(Print)
      콘솔 입력 함수(Scan)
      정돈된 표
      신상정보 입력과 출력
    • 06
      반복문 - for
    • 오로지 for
      구구단
      빛나는 이등변삼각형
    • 07
      조건문 - if/else
    • 조건에 따른 실행과 흐름 분기
      7과 9의 배수
      두 수의 차
    • 08
      분기문 - switch
    • swich문에 의한 선택적 실행
      안좋은 계산기
    • 09
      제어문
    • break, continue, goto문
      구구단2
      두 수를 더하면 99
    • 10
      컬렉션
    • 배열(Array)
      슬라이스(Slice)
      맵(Map)
      역행렬
      가장 긴 이름
      중간고사 평균 점수
    • 11
      함수
    • Go언어에서의 함수
      전역변수와 지역변수
      매개변수
      반환값(리턴값)
      익명 함수
      오름차순 정렬
      아이패드를 사주는 조건
      역학적 에너지
    • 12
      클로저
    • 외부 변수 접근 : 클로저
      동전 정리
    • 13
      구조체와 메소드
    • 구조체
      메소드
      성적 저장 프로그램
      역학적 에너지2
    • 14
      인터페이스(interface)
    • 메소드의 집합 인터페이스
      직육면체와 원기둥
    • 15
      defer와 panic()
    • 지연 처리 defer
      종료하는 panic(), 복구하는 recover()
      엘리베이터
      중간고사 평균 점수2
    • 16
      에러 처리
    • 에러 처리의 기본
      에러 출력 및 처리
      중간고사 평균 점수3
    • 17
      고루틴(Goroutine)
    • 비동기 프로세스의 기본
      고루틴의 활용
      고루틴 실습
    • 18
      채널(Channel)
    • 고루틴의 데이터 통로 : 채널
      비동기 채널과 버퍼
      동기 채널
      채널 닫기
      송신 전용, 수신 전용 채널
      채널 select문
      고루틴 실습2
      메시지 전송
      동기 채널 실습
      비동기 채널 실습
    • 19
      패키지(package)
    • 패키지의 개념
    • 20
      실전 프로젝트 - 마일리지 상점
    • 프로젝트를 시작하기 앞서
      실습모드에서 실습
      마일리지 상점의 주요 기능
      필수 구조체와 매인 메뉴
      잔여 수량, 잔여 포인트 구현
    • 21
      실전 프로젝트 - 주문하기, 장바구니 담기
    • 구매 구현(1)
      구매 구현(2)
      장바구니에 담기
      장바구니 확인(1)
      장바구니 확인(2)
    • 22
      실전 프로젝트 - 고루틴으로 배송하기
    • 배송 상태 확인(1)
      배송 상태 확인(2)
      배송 상태 확인(3)
      최종 코드
    에러 출력 및 처리
    16 에러 처리
    에러 출력 및 처리

    우리는 아직 에러 상황을 어떻게 처리하고 어떤 방식으로 출력할지 학습하지 않아 지난 강의에서 학습한 Panic을 이용해서 panic(err) 형식으로  에러 값을 출력하고 panic을 발생시켜 프로그램을 종료하는 방식으로 에러를 처리했습니다. 물론 이 방법도 틀린 방법은 아닙니다. 그렇지만 주로 에러를 처리하는 다른 방법이 있기 때문에 다른 형식을 확인해보겠습니다.

    아래는 "log" 패키지에서 제공하는 에러 출력 함수입니다. 각 함수는 에러 값을 출력하고 처리하는 방식이 다릅니다. 당연히 이 함수들을 사용하기 위해서 "log"를 import 해야합니다.

    • func Fatal(v ...interface{}) : 에러 로그 출력 및 프로그램 종료
    • func Panic(v ...interface{}) : 시간, 에러 메시지 출력 및 패닉 발생, defer 구문이 없을 시 런타임 패닉을 발생시키고 콜스택 출력
    • func Print(v ...interface{}) : 시간, 에러 메시지 출력 하지만 프로그램 종료하지 않음


    위 코드를 새롭게 배운 형식으로 조금 수정해봤습니다.아래 코드를 잘 살펴보고 바로 실행해보세요.

    go
    실행 결과를 확인해보세요!

    fmt.Errorf("%.2f으로 나누지마", b) 형식을 이용해 에러 값의 포멧을 지정해 저장하고, log.Print(err) 형식을 이용해 시간, 에러 메시지를 출력 하지만 프로그램은 종료하지 않습니다. 그래서 fmt.Println(result)이 실행됩니다.


    아래는 모든 에러 출력과 처리 방식을 적용한 예시 코드입니다. 바로 실행해보고 에러의 치명도가 어떨 때 어떤 함수를 사용할지 잘 생각해봅니다.

    go

    위 예시에서 errorCheck() 함수는 n이 1일 때만 error nil을 저장합니다. 따라서 2, 3, 4를 전달 인자로 호출한 함수는 모두 에러를 발생시킵니다. 우선 첫 번째로 발생하는 에러인 log.Print(err)는 에러 메시지만 출력합니다. 따라서 중요하지 않은 문제에만 적용하는 것이 좋습니다. 그다음log.Panic(err)이 실행되고 panic이 발생하기 전에 defer 구문을 실행합니다. 마지막으로 defer 구문의 익명 함수 안에 있는 log.Fatal(err)이 실행되고 프로그램이 완전히 종료됩니다. 따라서 실행된 순서로 치명도가 높은 경우에 적용하면 되는 에러 출력 함수입니다. 치명적인 예외 상황일수록 뒤에 사용된 에러 출력 함수를 사용해야합니다.

    그리고 log.Panic(err)과 log.Fatal(err)의 차이로는 Panic은 런타임 에러를 발생시키고 프로그램을 종료하고 Fatal은 프로그램을 정상적으로 완전히 종료합니다. 그리고 log.Panic()과 Panic() 함수는 같은 역할을 합니다. 


    아래 간단하게 시험 점수를 음수로 입력했을 때 예외로 처리한 에러 처리 예시 코드가 있습니다. 바로 실행해보세요.

    go
    실행 결과를 확인해보세요!
    질문하기