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 }