더북(TheBook)

6.2.2 fmt 패키지 사용

fmt.Errorf() 함수를 사용하면 에러가 발생한 값과 매개변수의 정보를 담아 에러 메시지를 만들 수 있다. 서식이 적용된 문자열과 여러 개의 매개변수로 메시지를 만드는 방식은 fmt.Printf()와 유사하다. 단, 메시지를 화면에 출력하는 것이 아니라 메시지를 담고 있는 error 타입 값을 만들어낸다.

fmt.Errorf() 함수의 실제 소스를 확인해 보자(https://golang.org/src/fmt/print.go?s=5673: 5723#L201).

▼ fmt.Errorf() 함수

func Errorf(format string, a ...interface{}) error {
    return errors.New(Sprintf(format, a...))
}

fmt.Errorf() 함수 내부에서는 fmt.Sprintf() 함수로 만들어진 문자열을 errors.New()의 매개변수로 전달해 error 값을 만들어낸다.

앞서 작성한 Sqrt() 함수에 fmt.Errorf()를 적용하여 에러를 생성해 보자.

func Sqrt(f float64) (float64, error) {
    if f < 0 {
        return 0, fmt.Errorf(“음수(%g)는 사용할 수 없습니다.”, f)
    }
    return math.Sqrt(f), nil
}

다음 코드는 커맨드 명령어에 적절한 매개변수 값이 전달되지 않았을 때 Usage 메시지를 담은 에러를 만들어낸다.

if len(os.Args) < 2 {
    err = fmt.Errorf(“usage: %s infile.txt outfile.txt”, filepath.Base(os.Args[0]))
    return
}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.